Qt中怎么实现Qtreewidget节点的撤销重做

Qt中怎么实现Qtreewidget节点的撤销重做,第1张

增与删

下面是添加的功能:

//这是添加根节点的功能实现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;

}

删除节点时记得循环删除这个节点下面的所有的子节点。

由于中国移动用户每个号码对应着相应的省份,归属于每个省份的移动公司所管辖与提供服务。因此您可以直接致电你所在地区10086人工客服来询问;   将qtreewidget的currentindex向上移动一位,的问题的详细情况及相关问题的解答

滤过父节点不可能,但是双击目标,还可以产生响应的事件。这是我写过的代码:单击事件(可以改双击,内容一样)

首先再 建树时注意加上一句:

HTREEITEM root = m_treeInsertItem(_T("图层集合"),TVI_ROOT);

m_treeSetItemData(root, 0);//就是加上的语句,0(可变)就是后面的nDat

void TreeDolg::OnNMClickTree1(NMHDR pNMHDR, LRESULT pResult)

{

// TODO: 在此添加控件通知处理程序代码

CPoint pt = GetCurrentMessage()->pt;//获取当前鼠标点击消息的坐标点

m_treeScreenToClient(&pt);//将鼠标的屏幕坐标,转换成树形控件的客户区坐标

UINT uFlags = 0;

HTREEITEM hItem = m_treeHitTest(pt, &uFlags);//然后做点击测试

if ((hItem != NULL) && (TVHT_ONITEM & uFlags))//如果点击的位置是在节点位置上面

{

m_treeSelectItem(hItem);

//获取开始我们设置的数据,注意这就是我为什么开始要每个节点设置不同的数据的原因。

//当然,如果你的数据节点比较少,你也可以通过获取节点的文字,如上面设置的"海淀区"

//,然后通过字符串比较来判断点击了哪个节点

int nDat = m_treeGetItemData(hItem); //然后根据不同的节点,你完成不同的动作即可

switch(nDat)

{

case 0:

break;

default:

}

}

pResult = 0;

}

treewidget点击后页的名称修改步骤如下:

1获取要修改的QTreeWidgetItem对象,可以使用QTreeWidget的currentItem()方法获取当前选中的Item,或者使用QTreeWidget的findItems()方法查找指定的Item。

2调用QTreeWidgetItem的setText方法,设置Item的显示文本。

3输入所有代码后,在QTreeWidgetItem的setData()方法中设置自定义的数据,此时进入后页即可修改名称。

TreeWidget常用于展示层次化的数据结构,如文件系统、目录结构、分类列表等。它可以方便地实现交互式浏览和编辑功能,是Qt中一个非常强大的控件。

1继承QTreewidget重新实现他的mouseReleaseEvent方法,为什么是release方法,因为源码里面mousePressEvent方法用来绘制treeWidget,而release方法则会发送出点击事件的信号

#ifndefTREEWIDGET_H

#define TREEWIDGET_H

#ifndef TREEWIDGET_H

#define TREEWIDGET_H

#include <QWidget>

#include <QTreeWidget>

#include <QMouseEvent>

class QTreeWidget2 : public QTreeWidget

{

Q_OBJECT

public:

explicit QTreeWidget2( QWidget parent = 0 );

protected:

void mouseReleaseEvent (QMouseEvent event);

};

#endif // TREEWIDGET_H

2实现

#include "treeWidgeth"

QTreeWidget2::QTreeWidget2( QWidget parent)

:QTreeWidget(parent)

{

}

void QTreeWidget2::mouseReleaseEvent (QMouseEvent event)

{

if (event->button () & Qt::RightButton )

{

emit customContextMenuRequested( event->pos ());

}else if (event->button () & Qt::LeftButton){

emit itemClicked(itemFromIndex (indexAt ( event->pos () )),indexAt ( event->pos () )column ());

}

}

3测试

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

#include <QMainWindow>

#include <QTreeWidgetItem>

class QTreeWidget2;

static const int itemtype1 = QTreeWidgetItem::Type;

class MainWindow : public QMainWindow

{

Q_OBJECT

public:

explicit MainWindow( QWidget parent = 0 );

public slots:

void setTest2(const QPoint &pos);

void setTest(QTreeWidgetItemitem,int column);

private:

QTreeWidget2 treeWidget;

QTreeWidgetItem currentItem;

};

#endif // MAINWINDOW_H

#include "mainwindowh"

#include "treeWidgeth"

#include <QMessageBox>

#include <QtDebug>

MainWindow::MainWindow(QWidget parent):

QMainWindow(parent)

{

treeWidget = new QTreeWidget2;

treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);

treeWidget->setHeaderLabel ( tr("资源列表") );

QTreeWidgetItem root = new QTreeWidgetItem( treeWidget );

root->setText (0,tr("root"));

QTreeWidgetItem item = new QTreeWidgetItem( root );

item->setText (0,tr("a"));

QTreeWidgetItem item1 = new QTreeWidgetItem( item );

item1->setText (0,tr("b"));

QTreeWidgetItem item2 = new QTreeWidgetItem( item1 );

item2->setText (0,tr("c"));

connect( treeWidget,SIGNAL(customContextMenuRequested( const QPoint &)),

this,SLOT(setTest2(const QPoint &)));

connect( treeWidget,SIGNAL(itemClicked(QTreeWidgetItem,int)),

this,SLOT(setTest(QTreeWidgetItem,int)));

setCentralWidget ( treeWidget );

resize ( 500,400 );

}

void MainWindow::setTest2(const QPoint &pos)

{

currentItem = treeWidget->itemAt(pos);

if ( currentItem == NULL )

return;

QMessageBox::warning (this,tr("test"),tr("hello"));

}

void MainWindow::setTest(QTreeWidgetItemitem,int column)

{

QMessageBox::warning (this,tr("asd"),tr("sd"));

以上就是关于Qt中怎么实现Qtreewidget节点的撤销重做全部的内容,包括:Qt中怎么实现Qtreewidget节点的撤销重做、如何将qtreewidget的currentindex向上移动一位、怎么判断qtreewidgetitem是否是父节点等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10126767.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存