首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QTreeWidget的数据更新

QTreeWidget的数据更新
EN

Stack Overflow用户
提问于 2016-03-12 17:58:50
回答 1查看 1.2K关注 0票数 0

我用一些QTreeWidget填充了一个data.The,每一行的第一列都是一个整数值。当我按下对选定项目的删除时,我希望该项目消失,删除项目后的数字将减少为1。例如,如果我在第一栏中有5项,我的标签为1,2,3,4,5。例如,我删除项目3时,我希望我的新标签为1,2,3,4,4。现在我的标签是1,2,4,5。我已经尝试过一些事情,但没有找到一个很好的解决方案……我的代码如下所示

代码语言:javascript
复制
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());

        }
    }

}
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-13 00:16:00

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

代码语言:javascript
复制
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());

            }
        }
    }

另一个问题是:

代码语言:javascript
复制
item2 = this->ui->testResultsTW->takeTopLevelItem(i); 

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35961318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档