2015-03-30 1 views
1

J'essaie de créer une table en utilisant QTableView et QTableWidgetItem.Comment faire pour passer QString ou QStringList à QTableWidgetItem

Fondamentalement, j'essaie de créer quelques lignes avec un nom sous le premier en-tête.

Mais le problème est que je passe chaque ligne avec un nom.

Même chose que je veux réaliser en utilisant QString, QStringList.

Actuellement, je ne transmets aucune valeur sous le deuxième en-tête.

S'il vous plaît suggérer comment faire cela. Veuillez trouver la fenêtre de sortie.

Ci-dessous est mon extrait de code:

#include <QApplication> 
#include <QtGui> 
#include <QMainWindow> 
#include <QTableWidget> 
#include <QString> 

#define ROW_NUMBER 20 
#define COL_NUMBER 2 

int main(int argc , char **argv) 
{ 
    QApplication app(argc,argv); 

    QMainWindow *window = new QMainWindow(); 

    window->setWindowTitle(QString::fromUtf8("TableWidget Resize column width")); 
    window->resize(200,250); 

    QTableWidget *table = new QTableWidget(); 
    table->setRowCount(ROW_NUMBER); 
    table->setColumnCount(COL_NUMBER); 

    table->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); 

    table->setHorizontalHeaderLabels(QString("Field;Value").split(";")); 

    table->setItem(0,0,new QTableWidgetItem("Sequence Number")); 
    table->setItem(1,0,new QTableWidgetItem("Date")); 
    table->setItem(2,0,new QTableWidgetItem("Seconds")); 
    table->setItem(3,0,new QTableWidgetItem("Source Date")); 
    table->setItem(4,0,new QTableWidgetItem("Source Time")); 
    table->setItem(5,0,new QTableWidgetItem("ServiceType")); 
    table->setItem(6,0,new QTableWidgetItem("Transtype")); 
    table->setItem(7,0,new QTableWidgetItem("UserId")); 
    table->setItem(8,0,new QTableWidgetItem("UserIMSI")); 
    table->setItem(9,0,new QTableWidgetItem("CorrelationId")); 
    table->setItem(10,0,new QTableWidgetItem("MajorNumber")); 
    table->setItem(11,0,new QTableWidgetItem("MinorNumber")); 
    table->setItem(12,0,new QTableWidgetItem("Source Type")); 
    table->setItem(13,0,new QTableWidgetItem("Total Consume")); 
    table->setItem(14,0,new QTableWidgetItem("Source Info")); 
    table->setItem(15,0,new QTableWidgetItem("Event")); 
    table->setItem(16,0,new QTableWidgetItem("GroupID")); 
    table->setItem(17,0,new QTableWidgetItem("ServiceID")); 
    table->setItem(18,0,new QTableWidgetItem("OperatorId")); 
    table->setItem(19,0,new QTableWidgetItem("Options Array")); 

    table->resizeColumnsToContents(); 

    window->setCentralWidget(table); 

    window->show(); 

    return app.exec(); 
} 

Output of Table Widget

+0

Pouvez-vous s'il vous plaît ajouter le compilateur et la version que vous utilisez ainsi que la version Qt? –

+0

Version Qt - Qt 5.2.0 (MSVC 2010, 32 bits) et compilateur - C++ 98 – Chinmoy

Répondre

2
QString test; 

test = "a"; 

// First Column 
table->setItem(0,0,new QTableWidgetItem(a)); 

// Second Column 
table->setItem(0,1,new QTableWidgetItem(a)); 

comme ça ou:

// 100% working example 
QVector<QString> string; 
QVector<QString> value; 

string.append("Nr1"); 
string.append("Nr2"); 
string.append("Nr3"); 
string.append("Nr4"); 

value.append("1"); 
value.append("2"); 
value.append("3"); 
value.append("4"); 

ui->twTable->setSortingEnabled(false); 

for(int i = 0 ; i < string.size() && i < value.size() ; ++i) 
{ 
    ui->twTable->insertRow(0); 

    // First Column 
    ui->twTable->setItem(0 , 0 , new QTableWidgetItem(string[i])); 

    // Second Column 
    ui->twTable->setItem(0 , 1 , new QTableWidgetItem(value[i])); 
} 

ui->twTable->setSortingEnabled(true); 

array, QStringList travail de la même façon que sans append.

tableau:

QString str[5] = { "a" , "b" , "c" , "d" , "e" }; 

for(int i = 0 ; i < 5 ; ++i) 
{ 
    ui->twTable->insertRow(0); 

    // First Column 
    ui->twTable->setItem(0 , 0 , new QTableWidgetItem(str[i])); 

    // Second Column 
    ui->twTable->setItem(0 , 1 , new QTableWidgetItem(str[i] + QString::number(i))); 
} 

QStringList:

QStringList str = { "a" , "b" , "c" , "d" , "e" }; 

for(int i = 0 ; i < 5 ; ++i) 
{ 
    ui->twTable->insertRow(0); 

    // First Column 
    ui->twTable->setItem(0 , 0 , new QTableWidgetItem(str[i])); 

    // Second Column 
    ui->twTable->setItem(0 , 1 , new QTableWidgetItem(str[i] + QString::number(i))); 
} 

Et dans l'ordre inverse:

// Probably the output you want: 
QString str[5] = { "a" , "b" , "c" , "d" , "e" }; 

for(int i = 4 ; i >= 0 ; --i) 
{ 
    ui->twTable->insertRow(0); 

    // First Column 
    ui->twTable->setItem(0 , 0 , new QTableWidgetItem(str[i])); 

    // Second Column 
    ui->twTable->setItem(0 , 1 , new QTableWidgetItem(str[i] + QString::number(i))); 
} 

Retirez le ui->twTable->insertRow(0) lorsque vous utilisez une quantité fixe de lignes comme vous dans votre code. Note latérale: J'ai tendance à désactiver le tri lors de l'insertion d'éléments et de l'activation après pour que les lignes ne soient pas automatiquement triées dans une position différente lorsque vous les saisissez.

+0

J'essaie de transmettre les noms tels que Numéro de séquence, Date, etc., sous En-tête de champ. Comme vous pouvez le voir à partir du code ci-dessus, j'écris 20 fois dans ce cas, donc comment je peux atteindre en utilisant un tableau afin que je puisse passer tous les 20 noms sous le 1er en-tête. – Chinmoy

+0

@Chinmoy mis à jour, c'est ce que vous cherchiez? – deW1

+0

J'essayais comme ceci: QString str [5] = {"a", "b", "c", "d", "e"}; ou QStringList str [] = {"a", "b", "c", "d", "e"}. Mais de toute façon je vais essayer avec votre suggestion. Alors que si de toute façon nous pouvons passer à QTableWidgetItem (QString (str)) – Chinmoy