我用一些QTreeWidget填充了一个data.The,每一行的第一列都是一个整数值。当我按下对选定项目的删除时,我希望该项目消失,删除项目后的数字将减少为1。例如,如果我在第一栏中有5项,我的标签为1,2,3,4,5。例如,我删除项目3时,我希望我的新标签为1,2,3,4,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());
}
}
}
}发布于 2016-03-13 00:16:00
您应该手动设置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); 此代码是从树视图中删除项,您真的要删除它吗?
https://stackoverflow.com/questions/35961318
复制相似问题