C++Qt-设置QTableWidget项的值



我一直在Qt中开发矩阵计算器,遇到了以下问题。我这样做:

void ShowMatrix::updateTable()
{
    int w = 323 - 305;
    int h = 300 - 227 + 15;
    for(int i = 0; i < matrix->getRows(); i++)
    {
        ui->tableWidget->insertRow(i);
        h += 35;
    }
    for(int j = 0; j < matrix->getColumns(); j++)
    {
        ui->tableWidget->insertColumn(j);
        w += 50;
    }
    this->resize(w, h);
    this->setMinimumSize(w, h);
    ui->retranslateUi(this);

    this->setWindowTitle(matrix->getName());
    emit updatingDone();
}

之后,当更新Done()时;信号发出,该插槽启动:

void ShowMatrix::setValues()
{
    QString str;
    for(int i = 0; i < matrix->getRows(); i++)
        for(int j = 0; j < matrix->getColumns(); j++)
        {
            ui->tableWidget->item(i, j)->setText("1");
        }
    ui->retranslateUi(this);
}

我只想将所有单元格的值设置为1。我不能对项目做任何事情,我试图对它们做的一切,比如设置标志、值等,都会使我的应用程序崩溃。如果我不发射updatingDone()信号,一切都很好。

您可以尝试使用此插槽:

void ShowMatrix::setValues()
{
    QString str;
    for(int i = 0; i < matrix->getRows(); i++)
        for(int j = 0; j < matrix->getColumns(); j++)
        {
            QTableWidgetItem *item = ui->tableWidget->item(i, j);
            if(!item) {
                item = new QTableWidgetItem();
                ui->tableWidget->setItem(i, j, item);
            }
            item->setText("1");
        }
    ui->retranslateUi(this);
}

所以,当您向表小部件添加新行和/或列时,添加的单元格仍然为null。因此,您需要首先使用QTableWidget->setItem将QTableWidget项放入这些单元格中。

最新更新