QtableWidget无法显示数据。

3
我有一个创建随机数据的类,我想在主窗口上的表格视图中显示这些数据。
我通过设计工具将表格视图添加到主窗口,称其为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;
}

2
如果在你的 for 循环之前调用 ui->tblData->setRowCount(data.size()); ui->tblData->setColumnCount(1); 会怎样? - vahancho
太神奇了!这个方法可行。您能否好心将其添加为答案,以便我可以标记为已解决?但是说实话:我不明白为什么将每个元素初始化为QTableWidget不足以满足要求... - RogerWilco77
1个回答

12

我认为在开始填充数据之前,您需要定义表的尺寸,即:

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

原因是表格的默认行数和列数为0,因此新添加的项目不可见。


我完全忘记了这件事 :) 你是对的,+1。 - Jablonski
好的,非常感谢。最初我是从Jürgen Wolf的书《Qt4 Gui-Entwicklung mit c++》(4.5版)开始学习的,在那里我没有意识到他在第271页中定义了表格的大小。他的表格大小不会改变,因此他可以在编译时定义大小。谢谢! - RogerWilco77
哇,你让我的一天都变得美好了... +1 - TheEagle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接