inVain3219
inVain3219

Reputation: 21

QT: Clearing a QTableWidget in order to display new items

I'm creating a program that displays a list of customers to a QTableWidget. The table will not out put until one of the buttons are clicked. Each button will output the correct items, however, for example, when i click "Key Customers" then "Show All" table will not change/output the new items to the table.

--

I want the table to clear its items then re-display new items on the same table widget.

--

I had this working before but didnt save the changes on the repo.

This is how the window is displayed.

slot code:

///
/// \brief AdminWindow::on_showAll_Button_clicked
/// Displays a QTableWidget populated by all items in the customer list
///

void AdminWindow::on_showAll_Button_clicked()
{
QStringList header;
Customer* ptr=NULL;     /// \brief points to the current obj being output
int row=0;              /// \brief current row
int col=0;              /// \brief current col

ptr=CList.list.returnObj();

ui->tableWidget->reset();

header << "Name" << "Street Address" << "City Address" << "Rating" <<
          "Priority";
ui->tableWidget->setHorizontalHeaderLabels(header);

while(ptr!=NULL)
{
    ui->tableWidget->setRowCount(row+1);
    ui->tableWidget->setColumnCount(col);

    col=0;
    QTableWidgetItem* newName = new QTableWidgetItem
            (ptr->getName());
    ui->tableWidget->setItem(row-1, col, newName);

    col=1;
    QTableWidgetItem* newStrtAd = new QTableWidgetItem
            (ptr->getStreetAd());
    ui->tableWidget->setItem(row-1, col, newStrtAd);

    col=2;
    QTableWidgetItem* newCtyAd = new QTableWidgetItem
            (ptr->getCityAd());
    ui->tableWidget->setItem(row-1, col, newCtyAd);

    col=3;
    QTableWidgetItem* newRate = new QTableWidgetItem
            (ptr->getRating());
    ui->tableWidget->setItem(row-1, col, newRate);

    col=4;
    QTableWidgetItem* newKey = new QTableWidgetItem
            (ptr->getKeyCust());
    ui->tableWidget->setItem(row-1, col, newKey);

    CList.list.getNext();
    ptr=CList.list.returnObj();
    row++;
    col++;
}
}

///
/// \brief AdminWindow::on_KeyButton_clicked
/// Displays a QTableWidget populated by the customer list and filtered
///     to display Key Customers
///

void AdminWindow::on_KeyButton_clicked()
{
QStringList header;
Customer* ptr=NULL;     /// \brief points to the current obj being output
int row=0;              /// \brief current row
int col=0;              /// \brief current col

ptr=CList.list.returnObj();

ui->tableWidget->reset();

header << "Name" << "Street Address" << "City Address" << "Rating" <<
          "Priority";
ui->tableWidget->setHorizontalHeaderLabels(header);

while(ptr!=NULL)
{
    if(ptr->getKeyCust()=="key")
    {
        ui->tableWidget->setRowCount(row+1);
        ui->tableWidget->setColumnCount(col);

        col=0;
        QTableWidgetItem* newName = new QTableWidgetItem
                (ptr->getName());
        ui->tableWidget->setItem(row-1, col, newName);

        col=1;
        QTableWidgetItem* newStrtAd = new QTableWidgetItem
                (ptr->getStreetAd());
        ui->tableWidget->setItem(row-1, col, newStrtAd);

        col=2;
        QTableWidgetItem* newCtyAd = new QTableWidgetItem
                (ptr->getCityAd());
        ui->tableWidget->setItem(row-1, col, newCtyAd);

        col=3;
        QTableWidgetItem* newRate = new QTableWidgetItem
                (ptr->getRating());
        ui->tableWidget->setItem(row-1, col, newRate);

        col=4;
        QTableWidgetItem* newKey = new QTableWidgetItem
                (ptr->getKeyCust());
        ui->tableWidget->setItem(row-1, col, newKey);

        CList.list.getNext();
        ptr=CList.list.returnObj();
        row++;
        col++;
    }else
    {
        CList.list.getNext();
        ptr=CList.list.returnObj();
    }
}
}

///
/// \brief AdminWindow::on_NonKeyButton_clicked -
/// Displays a QTableWidget populated by the customer list and filtered
///     to display only Non-Key customers
///
void AdminWindow::on_NonKeyButton_clicked()
{
QStringList header;
Customer* ptr=NULL;     /// \brief points to the current obj being output
int row=0;              /// \brief current row
int col=0;              /// \brief current col

ptr=CList.list.returnObj();

ui->tableWidget->reset();

header << "Name" << "Street Address" << "City Address" << "Rating" <<
          "Priority";
ui->tableWidget->setHorizontalHeaderLabels(header);

while(ptr!=NULL)
{
    if(ptr->getKeyCust()!="key")
    {
        ui->tableWidget->setRowCount(row+1);
        ui->tableWidget->setColumnCount(col);

        col=0;
        QTableWidgetItem* newName = new QTableWidgetItem
                (ptr->getName());
        ui->tableWidget->setItem(row-1, col, newName);

        col=1;
        QTableWidgetItem* newStrtAd = new QTableWidgetItem
                (ptr->getStreetAd());
        ui->tableWidget->setItem(row-1, col, newStrtAd);

        col=2;
        QTableWidgetItem* newCtyAd = new QTableWidgetItem
                (ptr->getCityAd());
        ui->tableWidget->setItem(row-1, col, newCtyAd);

        col=3;
        QTableWidgetItem* newRate = new QTableWidgetItem
                (ptr->getRating());
        ui->tableWidget->setItem(row-1, col, newRate);

        col=4;
        QTableWidgetItem* newKey = new QTableWidgetItem
                (ptr->getKeyCust());
        ui->tableWidget->setItem(row-1, col, newKey);

        CList.list.getNext();
        ptr=CList.list.returnObj();
        row++;
        col++;
    }else
    {
        CList.list.getNext();
        ptr=CList.list.returnObj();
    }
}
}

I've tried all the ui->tableWidget->clear..() and ui->tableWidget->reset() methods to no avail. Thanks for the help in advance!

Upvotes: 1

Views: 2637

Answers (1)

Antonio Dias
Antonio Dias

Reputation: 2881

I believe that you're looking for tableWidget->setRowCount(0). This function clear the table, but not the header labels. I'm using it and it works better than clear and reset methods.

Upvotes: 0

Related Questions