1.qtreewidgetitem函数clone出的源码节点如何设置其type?
2.Qt中怎么实现Qtreewidget节点的撤销重做
qtreewidgetitem函数clone出的节点如何设置其type?
从 QTreeWidgetItem 类的继承关系来看,它是源码继承自 QObject 类的。而 type() 方法是源码 QObject 类的一个虚函数,因此在 QTreeWidgetItem 类中并没有直接提供设置类型的源码nice指标公式源码方法。
那么,源码如何在克隆出的源码免费网站源码网站加源码节点中设置类型呢?可以通过重新实现 clone() 方法来实现。
示例代码如下:
class CustomTreeWidgetItem: public QTreeWidgetItem {
public:
CustomTreeWidgetItem(const CustomTreeWidgetItem& other): QTreeWidgetItem(other) {
setType(other.type());
}
CustomTreeWidgetItem(QTreeWidgetItem* parent,源码 int type = Type): QTreeWidgetItem(parent, type) { }
QTreeWidgetItem* clone() const override {
return new CustomTreeWidgetItem(*this);
}
void setType(int type) {
QTreeWidgetItem::setType(type);
}
};
在上述代码中,我们新建了一个 CustomTreeWidgetItem 类,源码它继承自 QTreeWidgetItem 类,源码并重写了 clone() 方法。源码在重新实现 clone() 方法时,源码我们创建了一个 CustomTreeWidgetItem 类型的源码新节点,并将重载后的源码印刷网站源码伪静态源码 setType() 方法用于设置节点的类型。这样,源码在调用 clone() 方法获得克隆节点后,源码就可以通过 setType() 方法设置节点的泛滥源码和不泛滥源码区别类型了。
使用方法如下:
QTreeWidgetItem* item = new QTreeWidgetItem();
item->setType(QTreeWidgetItem::UserType + 1); // 设置类型为 UserType + 1
QTreeWidgetItem* clonedItem = item->clone(); // 克隆节点
dynamic_cast<CustomTreeWidgetItem*>(clonedItem)->setType(QTreeWidgetItem::UserType + 2); // 设置克隆出来的节点的类型为 UserType + 2
在上述代码中,我们首先创建了一个类型为 UserType + 1 的 QTreeWidgetItem 节点,并将其克隆出来。小视频源码自媒体源码然后,我们通过 dynamic_cast 将 clonedItem 转换为 CustomTreeWidgetItem 类型,再使用 setType() 方法将其类型设置为 UserType + 2。
Qt中怎么实现Qtreewidget节点的撤销重做
增与删
下面是添加的功能:
//这是添加根节点的功能实现this->connect(ui->Root_btn, SIGNAL(clicked(bool)), this, SLOT(addRoot()));void Widget::addRoot()
{
QString one = ui->first->text();
QString two = ui->second->text();
QString three = ui->third->text();
QTreeWidgetItem* item = new QTreeWidgetItem();
item->setText(0, one);
item->setText(1, two);
item->setText(2, three);
ui->Tree->addTopLevelItem(item);
}//这是添加叶子节点的实现this->connect(ui->Child_btn, SIGNAL(clicked(bool)), this, SLOT(addChild()));void Widget::addChild()
{
QString one = ui->first->text();
QString two = ui->second->text();
QString three = ui->third->text();
QTreeWidgetItem* parent = ui->Tree->currentItem();
QTreeWidgetItem* item = new QTreeWidgetItem();
item->setText(0, one);
item->setText(1, two);
item->setText(2, three); parent->addChild(item);
}
添加叶子节点字需要注意父节点的获取就可以了。
下面是删除节点的功能:
this->connect(ui->DEL_btn, SIGNAL(clicked(bool)), this, SLOT(deleteNode()));
void del(QTreeWidgetItem* node){ if(node->childCount() > 0)
{ for(int i = 0; i < node->childCount(); i ++)
{ del(node->child(i));
}
}
else
{
delete node;
}
}
void Widget::deleteNode()
{
QTreeWidgetItem* item = ui->Tree->currentItem();
if(item->childCount() > 0)
{ for(int i = 0; i < item->childCount(); i ++)
{ del(item->child(i));
}
}
delete item;
}
删除节点时记得循环删除这个节点下面的所有的子节点。