QT设置QTreeWidget某一列可编辑

2019-04-13 17:30发布

转自:https://yq.aliyun.com/wenji/260619
QTreeWidget都是QTreeWidgetItem的形式来组织的,也就是说如果单独设置属性的话,可以使得某一行可以编辑或者不可编辑 QTreeWidgetItem*->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable);// 设置某一行的内容可编辑 这里给大家介绍个方法来使某一列仅可编辑。 QTreeWidget::openPersistentEditor ( QTreeWidgetItem * item, int column = 0 )可用来打开某一行的某一列的编辑状态 QTreeWidget::closePersistentEditor ( QTreeWidgetItem * item, int column = 0 )则可以用来关闭某一行某一列的始终编辑状态 在鼠标双击树控件的某个部分的时候,树控件会发出一个消息itemDoubleClicked ( QTreeWidgetItem * item, int column ),如果我们捕捉这个消息 ,并判断Column的值,就可以使得某一列可以编辑,而其它列不可编辑。但是由于openPersistentEditor 会使得这个单元格始终可编辑 ,及时鼠标已经没有选中该单元格了,所以,我们还需要在用户编辑完当前单元格时,调用closePersistentEditor来关闭单元格始终可以编辑状态,可以在itemSelectionChanged信号的信号处理函数处理(就是选中不修改值的,也会发出此信号)。 connect(ui->feederset_treeWidget,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), this,SLOT(openEditor(QTreeWidgetItem*,int))); connect(ui->feederset_treeWidget,SIGNAL(itemSelectionChanged()), this,SLOT(closeEditor())); ui->feederset_treeWidget->setStyleSheet("QTreeWidget::item{height:20px}");// 设置行距大小,可以防止编译修改完成以后,行距会发生变化 void xdlConfig::openEditor(QTreeWidgetItem *item, int column) { if(column==2)//设置第三列可编辑 { ui->feederset_treeWidget->openPersistentEditor(item,column);// 设置某一item可以编辑 temItem = item; temColumn = column; } } // 当修改完以后或者选中其他列的时候,关闭可编辑状态 void xdlConfig::closeEditor() { //QMessageBox::question(this,"修改",QString("%1").arg(temColumn),QMessageBox::Yes,QMessageBox::No); if(temItem != NULL) { ui->feederset_treeWidget->closePersistentEditor(temItem,temColumn);// 设置某一item不可编辑 } }