QT中设置QTreeWidget某一列可编辑

大家都知道,在Qt中, 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 != 0 && column != 4)
    {
        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不可以编辑
    }
}
  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值