增与删
下面是添加的功能:
//这是添加根节点的功能实现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是否是父节点等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)