2012-05-15 9 views
5

soy nuevo en Qt y necesita un poco de ayuda con lo siguiente:rellenar la tabla de widget desde archivo de texto en Qt

me gustaría crear una interfaz gráfica de usuario que contiene un widget tabla que se rellena con la información procedente de un delimitado por tabuladores Archivo de texto. En mi GUI, el usuario primero busca el archivo de texto y luego muestra el contenido en el widget de tabla. He hecho la parte de navegación, pero ¿cómo puedo cargar los datos del archivo de texto en el widget de tabla?

+0

Esta pregunta es muy vaga, ¿Está utilizando MVC o los widgets de 'tradicionales'? Un widget de tabla es 2D, entonces, ¿cómo se va a presentar el texto en la tabla? – cmannett85

+0

En Qt Creator, hay un control de GUI llamado Table Widget que es lo que estoy usando. Pensé que la pregunta era directa. Quiero rellenar una tabla en mi GUI con un archivo de texto delimitado por tabulaciones como fuente de los datos. Si usar un widget de tabla, no es el mejor enfoque, estoy abierto a otras sugerencias. Como mencioné, soy nuevo en Qt. –

+0

Bien 'QTableWidget' es la mejor opción si desea mostrar solo texto, en una cuadrícula 2D, sin compartir los datos con ningún otro widget. También obtendrás una mejor respuesta si solo haces una sola pregunta en tu publicación: cargando un archivo de texto, analizándolo en cadenas separadas y luego empujándolos hacia un widget de tabla; son tres procesos muy diferentes, y me sorprendería si cada uno de ellos no se explica en este sitio o los documentos. – cmannett85

Respuesta

8

Son dos pasos, analizan el archivo y luego lo insertan en el widget.

Agarré estas líneas del QFile documentation.

QFile file("in.txt"); 
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) 
    return; 

while (!file.atEnd()) { 
    QByteArray line = file.readLine(); 
    process_line(line); 
} 

Su función process_line debería tener este aspecto:

static int row = 0; 
QStringList ss = line.split('\t'); 

if(ui->tableWidget->rowCount() < row + 1) 
    ui->tableWidget->setRowCount(row + 1); 
if(ui->tableWidget->columnCount() < ss.size()) 
    ui->tableWidget->setColumnCount(ss.size()); 

for(int column = 0; column < ss.size(); column++) 
{ 
    QTableWidgetItem *newItem = new QTableWidgetItem(ss.at(column)); 
    ui->tableWidget->setItem(row, column, newItem); 
} 

row++; 

Para obtener más información acerca de la manipulación de QTableWidgets, comprobar el documentation. Para los nuevos usuarios que usan el constructor de GUI en Qt Creator, es complicado descifrarlo al principio.

Eventualmente recomendaría cambiar a la construcción de la GUI como lo hacen en todos sus examples ... agregando todo a mano en el código en lugar de arrastrar y soltar.

-2

Lo sentimos ...

void squidlogreader_::process_line(QString line) 
{ 
    static int row = 0; 
    QStringList ss = line.split('\t'); 

    if(ui->tableWidget->rowCount() < row + 1) 
    ui->tableWidget->setRowCount(row + 1); 
    if(ui->tableWidget->columnCount() < ss.size()) 
    ui->tableWidget->setColumnCount(ss.size()); 

    for(int column = 0; column < ss.size(); column++) 
    { 
    QTableWidgetItem *newItem = new QTableWidgetItem(ss.at(column)); 
    ui->tableWidget->setItem(row, column, newItem); 
    } 

    row++; 

} 
void squidlogreader_::on_pushButton_clicked() 
{ 
    QFile file("in.txt"); 
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) 
     return; 

    while (!file.atEnd()) { 
     QString line = file.readLine(); 
     process_line(line); 
    }