2014-09-27 113 views
0

我有一个类创建随机数据,我想在主窗口的tableview中显示。QtableWidget不显示数据

我通过Designer添加了一个表格视图到主窗口并将其称为tblData。 我怀疑这个问题与此有关,因为当我调用构造函数时,具有一些实现的ui文件已经存在。

我所采取的“详细说明”部分从http://qt-project.org/doc/qt-5/qtablewidget.html为指导....

然而,该表为空。我不明白为什么......非常感谢。

include "mainwindow.h" 
#include "ui_mainwindow.h" 

#include <QDebug> 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 

    QStringList headers; 
    headers << "Datapoints"; 

    Dataset *myData; 
    myData = new Dataset(); 
    myData->createRandomData(10); // create a ten element vector 

    QVector<int> data; 
    data = myData->getDataVector(); // data vector created in class Dataset 
    qDebug() << data; 

    int i; 
    for (i = 0 ; i < data.size() ; i++){ 
     QString datapoint; 
     datapoint = QString::number(data[i]); 
     QTableWidgetItem * newItem = new QTableWidgetItem(datapoint); 

     ui->tblData->setItem(i, 0, newItem); // works not 


     qDebug() << datapoint; // works 
    } 


} 

MainWindow::~MainWindow() 
{ 
    delete ui; 
} 
+1

如果调用'ui-> tblData-> setRowCount(data.size()),该怎么办? ui-> tblData-> setColumnCount(1);'在'for'循环之前? – vahancho 2014-09-27 14:23:52

+0

魔法!这工作。你会如此友善地将它添加为答案,以便我可以将其标记为已解决?但老实说:我不明白为什么初始化每个元素为QTableWidget是不够的... – RogerWilco77 2014-09-27 20:14:59

回答

1

我认为你必须先从数据来填充它之前来定义表格的维度,即

ui->tblData->setRowCount(data.size()); 
ui->tblData->setColumnCount(1); 

的原因是,默认情况下,该表的初始行和列数为0 ,所以新添加的项目aro不可见。

+0

我完全忘了这:)你很完美,+1 – Chernobyl 2014-09-28 08:21:49

+0

好,非常感谢。最初,我从JürgenWolf的“Qt4 Gui-Entwicklung mit C++”(4.5版的一本书)开始,在那里我没有意识到他在第271页中定义了表格的大小。他的表大小不会改变,所以他可以在编译时定义大小。谢谢! – RogerWilco77 2014-09-28 10:43:24