我一直在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项放入这些单元格中。