更新QTreeWidget的数据

时间:2016-03-12 17:58:50

标签: c++ qt user-interface c++11 qt-creator

我用一些数据填充了一个QTreeWidget。每一行的第一列是一个整数值。当我在所选项目上按删除时,我希望该项目消失,删除项目后的数字减少为1.例如,如果我的第一列中有5个项目,我有标签1,2,3,4, 5。例如,当我删除第3项时,我希望我的新标签为1,2,3,4。现在我的标签是1,2,4,5。我已经尝试了几件事,但没有找到一个好的解决方案...我的代码是下面给出的

void MainWindow::keyPressEvent(QKeyEvent *event)
{
    if(event->key() == Qt::Key_Delete)
    {
        QTreeWidgetItem *item = this->ui->testResultsTW->currentItem();
        if(!item)return;
        int x = this->ui->testResultsTW->indexOfTopLevelItem(item);
        if(x >= 0 && x < this->ui->testResultsTW->topLevelItemCount())
        {
            item = this->ui->testResultsTW->takeTopLevelItem(x);
            if(item)
           {
                delete item;
                stringstream ss;
                ss << (x + 1);
                string message = "Item " + ss.str() + " has been deleted";
                QTreeWidgetItem *item2;                   
              for(int i = x; i <= this->ui->testResultsTW->topLevelItemCount() ; i++)
              {

                   item2 = this->ui->testResultsTW->takeTopLevelItem(i);
                ss << (i - 1);
                string nr = ss.str();
                item2->data(0,Qt::UserRole) = nr;

                // item2->data(0,Qt::UserRole) = nr.c_str();
              //  item2->setText(0,tr("Ana"));
            }

            QMessageBox::information(this,"Deleted",message.c_str());

        }
    }

}
}

1 个答案:

答案 0 :(得分:1)

您应手动设置列0上的文本。

if(event->key() == Qt::Key_Delete)
    {
        QTreeWidgetItem *item = this->ui->testResultsTW->currentItem();
        if(!item)return;
        int x = this->ui->testResultsTW->indexOfTopLevelItem(item);
        if(x >= 0 && x < this->ui->testResultsTW->topLevelItemCount())
        {
            item = this->ui->testResultsTW->takeTopLevelItem(x);
            if(item)
            {
                delete item;
                stringstream ss;
                ss << (x + 1);
                string message = "Item " + ss.str() + " has been deleted";
                for(int i = x; i <= this->ui->testResultsTW->topLevelItemCount() ; i++)
                {
                    QTreeWidgetItem *topItem = this->ui->topLevelItem(i);
                    if(topItem) 
                    {
                        topItem->setText(0, QString::number(i + 1));
                    }
                }

            QMessageBox::information(this,"Deleted",message.c_str());

            }
        }
    }

另一个问题是:

item2 = this->ui->testResultsTW->takeTopLevelItem(i); 

此代码是树视图中的删除项,您真的要将其删除吗?