QTableWidget с setItem не показывает данные - PullRequest
0 голосов
/ 08 мая 2019

Я новичок в 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 новые добавленные данные не показывались

1 Ответ

1 голос
/ 08 мая 2019

Вот твоя проблема:

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);
// ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...