c++ - QTableWidget with setItem 不显示数据

标签 c++ qt

我是 Qt 的新手,真的需要帮助解决这个问题。我目前正在学校开展一个实践培训项目。当我使用 ui->tableWidget->setItem(.....) 但没有显示时,我被卡住了。虽然新行添加了空白单元格。 我需要帮助来发现问题并为我糟糕的英语感到抱歉。谢谢

void TravelAgency::CreateBooking(char type, double price, string start, string end, long travelID, vector<string> bookingDetails)
{
.
.
.
.
ui->tableWidget->insertRow(ui->tableWidget->rowCount());
int a = ui->tableWidget->rowCount();
 QString s = QString::number(idnummer);
 ui->tableWidget->setItem(a,0, new QTableWidgetItem(s));
 s = QString::number(price);
 ui->tableWidget->setItem(a,1, new QTableWidgetItem(s));
 s = QString::number(travelID);
 ui->tableWidget->setItem(a,2, new QTableWidgetItem(s));
.
.
.
}

我的表中已经有一些数据,这些数据已经用相同的语法完美显示。我已经调试并确保这些变量的值是正确的。不知何故,这些数据现在确实显示出来了。 使用这种方法,它的工作:

   void TravelAgency::on_actionDatei_Einlesen_triggered()
    {
        ui->tableWidget->resizeColumnsToContents();       // resize columns to contents

        ui->tableWidget->clear();                         // clear all Data from Table
        ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); // Read Only
        ui->tableWidget->setRowCount(0);   // Remove all rows
        ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"Buchungsnummer"<<"Preis"<<"Name"<<"Reise ID"); // set Columns Headers


        this->readFile();
     for(unsigned int i = 0; i < this->allBookings.size(); i ++){
                ui->tableWidget->insertRow(ui->tableWidget->rowCount());
                QString q= QString::number(this->allBookings.at(i)->getId());
                ui->tableWidget->setItem(static_cast<int>(i),0, new QTableWidgetItem(q));
                q = QString::number(this->allBookings.at(i)->getPrice());
                ui->tableWidget->setItem(static_cast<int>(i),1, new QTableWidgetItem(q));

                q  = QString::fromStdString( this->findCustomer(this->findTravel(this->allBookings.at(i)->getTravelID())->getCustomerID())->getName());


                ui->tableWidget->setItem(static_cast<int>(i),2, new QTableWidgetItem(q));
                q = QString::number(this->allBookings.at(i)->getTravelID());
                ui->tableWidget->setItem(static_cast<int>(i),3, new QTableWidgetItem(q));

        }
        ui->tableWidget->resizeColumnsToContents();
        ui->actionDatei_Einlesen->setEnabled(false);
}

在第107和108行,没有显示新添加的数据

最佳答案

这是你的问题:

ui->tableWidget->insertRow(ui->tableWidget->rowCount());
int a = ui->tableWidget->rowCount();

您插入一行。这增加了 rowCount() 的结果。 然后使用 new rowCount() 作为项目所在的行。

如果你反过来做,它会起作用:

int a = ui->tableWidget->rowCount();
ui->tableWidget->insertRow(ui->tableWidget->rowCount());

或者只是

int a = ui->tableWidget->rowCount();
ui->tableWidget->setRowCount(a+1);
// ...

关于c++ - QTableWidget with setItem 不显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56031855/

相关文章:

c++ - QNetworkAccessManager问题

c++ - SSE Intrinsics 和循环展开

c++ - 异或数据包中的所有数据

macos - Qt:从构建中关闭 'CoreWlan support'

c++ - Qt 告诉我我的 SLOT 不存在,但是通过 make clean,让它不再提示

c++ - 如何在退出时调用插槽

C++ 帮助理解偏特化

c++ - 编写 LookAt 函数

c++ - 包含 .h 时 CUDA 报告 Unresolved inclusion

qt - QML 仅在可用时导入更高版本的模块?