首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

QTreeWidget 增添editingFinished()信号

2013-03-26 
QTreeWidget 添加editingFinished()信号? 一. QTreeWidget设置可编辑connect(m_tree,itemChanged(QTreeWid

QTreeWidget 添加editingFinished()信号

? 一. QTreeWidget设置可编辑

connect(m_tree,itemChanged(QTreeWidgetItem*,int),this,SLOT(saveModify(QTreeWidgetItem*,int));QTreeWidgetItem *item=new QTreeWidgetItem(m_tree);item->setText(0,"hello");item->setFlags(item->flags()|Qt::ItemIsEditable); // 设置可编辑属性

? ?上面这种方式,当子节点编辑完成时,如果节点文本值仍然为hello, 不能触发saveModify槽. 因为子节点文本值没有改变,不能很好的表现编辑完成后这一动作. MVC里提供了对QTableWidget的模型QAbstractTabelModel的支持,但是却没有提供对树形结构的模型支持,看来此路不通.?

?

二. 利用QLineEdit来实现编辑完成后动作

? ? ? 只有QLineEdit和QAbstracSpinBox支持editingFinished()信号, 因此我们可以在树形结构中通过setItemWidget()来设置QLineEdit组件

// 添加子节点void TreeEdit::addNode(){    QTreeWidgetItem *curItem=m_tree->currentItem();    QTreeWidgetItem *newItem=new QTreeWidgetItem(curItem);    // 添加子节点    curItem->addChild(newItem);    // 使用QTextEdit的信号    QLineEdit *lineEdit=new QLineEdit(this);    connect(lineEdit,SIGNAL(editingFinished()),this,SLOT(finishEdit()));    // 设置widget    m_tree->setItemWidget(newItem,0,lineEdit);    m_tree->expandItem(curItem);    // 选中项    m_tree->setCurrentItem(newItem);    // 设置默认值    lineEdit->setText("default");    lineEdit->setSelection(0,7);}// 编辑完成后对应的槽函数void TreeEdit::finishEdit(){    // 编辑完成后,移除widget,还原树    QTreeWidgetItem *curItem=m_tree->currentItem();    QLineEdit *edit=qobject_cast<QLineEdit*>(m_tree->itemWidget(curItem,0));    if(!edit)        return;    QString text=edit->text();    // 移除widget    m_tree->removeItemWidget(curItem,0);    // 还原值    curItem->setText(0,text);}

? ?运行效果如下:

? ?QTreeWidget 增添editingFinished()信号

? ? ? ??

热点排行