2、节点移动功能已实现,但有部分节点不允许拖动后成为根节点,请问该如何实现?
3、如何让QTreeWidget实现:按Ctrl+z后Undo,按Ctrl+r后Redo?比如说:撤销或重做节点的重命名。
12 个解决方案
#1
1,创建QMenu然后,itemClicked信号对应写个槽实现菜单弹出。
2,设置为根节点,对应的属性设置为不可移动。
3,第三个没有遇到,可能要捕捉键盘消息。作处理。QTreeWidgetItem。
2,设置为根节点,对应的属性设置为不可移动。
3,第三个没有遇到,可能要捕捉键盘消息。作处理。QTreeWidgetItem。
#2
1:我要求的是右击后才弹出菜单。如果用itemClicked的话好像左击也会弹出菜单,那就不符合要求了
2:把什么对象设置为根节点?把什么属性设为不可移动?我找了很久,发现不容易找到:
2:把什么对象设置为根节点?把什么属性设为不可移动?我找了很久,发现不容易找到:
#3
设置role
响应键盘事件
响应键盘事件
#4
1:应该不那么简单,我试过好几种方法了,楼上说的、SIGNAL(customContextMenuRequested(const QPoint&))……都没成功。理论上可以写控件的派生类然后用contextMenuEvent()来实现,问题是我的界面整体比较复杂,这样做会加大界面设计的难度。
#5
void QTreeView::mousePressEvent ( QMouseEvent * event )
{
if(event->button() == Qt::RightButton)
{
弹出菜单;
}
}
Undo系统麻烦一些,查查资料如果有再来
{
if(event->button() == Qt::RightButton)
{
弹出菜单;
}
}
Undo系统麻烦一些,查查资料如果有再来
#6
如果用楼上的方法,岂不是要写QTreeView的派生类了吗?
我的界面比较复杂,这样做会大大增加界面设计的难度。
我的界面比较复杂,这样做会大大增加界面设计的难度。
#7
不用派生,此函数是QTreeView的虚函数,只需在.h中声明,.cpp中重写一下即可
#8
瞎说了一句,==,我测试一个方法如果好了再说
#9
用Creater生成一个工程,只拉一个QTreeView到QWidget上
在.H中声明Action变量:
private:
Ui::Widget *ui;
QAction *copy;//示例菜单项一
QAction *cut; //示例菜单项二
在.CPP文件的构造函数:
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
copy = new QAction("Copy", ui->treeView); //初始化
cut = new QAction("Cut", ui->treeView);
//这里可以连接信号...
ui->treeView->addAction(copy); //给QTreeView的对象添加Action
ui->treeView->addAction(cut);
ui->treeView->setContextMenuPolicy(Qt::ActionsContextMenu);//设置右键菜单
}
OK了,经过测试,完全满足你的要求:在QTreeView上右击鼠标,就弹出有Copy和Cut两项内容的菜单
在.H中声明Action变量:
private:
Ui::Widget *ui;
QAction *copy;//示例菜单项一
QAction *cut; //示例菜单项二
在.CPP文件的构造函数:
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
copy = new QAction("Copy", ui->treeView); //初始化
cut = new QAction("Cut", ui->treeView);
//这里可以连接信号...
ui->treeView->addAction(copy); //给QTreeView的对象添加Action
ui->treeView->addAction(cut);
ui->treeView->setContextMenuPolicy(Qt::ActionsContextMenu);//设置右键菜单
}
OK了,经过测试,完全满足你的要求:在QTreeView上右击鼠标,就弹出有Copy和Cut两项内容的菜单
#10
跟着学习下!
#11
to 7楼:
不用派生,此函数是QTreeView的虚函数,只需在.h中声明,.cpp中重写一下即可
怎样重写?举个最最基本的例子给我就行了。
还有,我要的是当且仅当右击指定的节点时弹出菜单,而不是随便右击树形控件的某个地方就弹出菜单。用mousePressEvent能实现吗?
不用派生,此函数是QTreeView的虚函数,只需在.h中声明,.cpp中重写一下即可
怎样重写?举个最最基本的例子给我就行了。
还有,我要的是当且仅当右击指定的节点时弹出菜单,而不是随便右击树形控件的某个地方就弹出菜单。用mousePressEvent能实现吗?
#12
不知楼主后来撤销undo操作做得如何了?可否让我借鉴一下?
#1
1,创建QMenu然后,itemClicked信号对应写个槽实现菜单弹出。
2,设置为根节点,对应的属性设置为不可移动。
3,第三个没有遇到,可能要捕捉键盘消息。作处理。QTreeWidgetItem。
2,设置为根节点,对应的属性设置为不可移动。
3,第三个没有遇到,可能要捕捉键盘消息。作处理。QTreeWidgetItem。
#2
1:我要求的是右击后才弹出菜单。如果用itemClicked的话好像左击也会弹出菜单,那就不符合要求了
2:把什么对象设置为根节点?把什么属性设为不可移动?我找了很久,发现不容易找到:
2:把什么对象设置为根节点?把什么属性设为不可移动?我找了很久,发现不容易找到:
#3
设置role
响应键盘事件
响应键盘事件
#4
1:应该不那么简单,我试过好几种方法了,楼上说的、SIGNAL(customContextMenuRequested(const QPoint&))……都没成功。理论上可以写控件的派生类然后用contextMenuEvent()来实现,问题是我的界面整体比较复杂,这样做会加大界面设计的难度。
#5
void QTreeView::mousePressEvent ( QMouseEvent * event )
{
if(event->button() == Qt::RightButton)
{
弹出菜单;
}
}
Undo系统麻烦一些,查查资料如果有再来
{
if(event->button() == Qt::RightButton)
{
弹出菜单;
}
}
Undo系统麻烦一些,查查资料如果有再来
#6
如果用楼上的方法,岂不是要写QTreeView的派生类了吗?
我的界面比较复杂,这样做会大大增加界面设计的难度。
我的界面比较复杂,这样做会大大增加界面设计的难度。
#7
不用派生,此函数是QTreeView的虚函数,只需在.h中声明,.cpp中重写一下即可
#8
瞎说了一句,==,我测试一个方法如果好了再说
#9
用Creater生成一个工程,只拉一个QTreeView到QWidget上
在.H中声明Action变量:
private:
Ui::Widget *ui;
QAction *copy;//示例菜单项一
QAction *cut; //示例菜单项二
在.CPP文件的构造函数:
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
copy = new QAction("Copy", ui->treeView); //初始化
cut = new QAction("Cut", ui->treeView);
//这里可以连接信号...
ui->treeView->addAction(copy); //给QTreeView的对象添加Action
ui->treeView->addAction(cut);
ui->treeView->setContextMenuPolicy(Qt::ActionsContextMenu);//设置右键菜单
}
OK了,经过测试,完全满足你的要求:在QTreeView上右击鼠标,就弹出有Copy和Cut两项内容的菜单
在.H中声明Action变量:
private:
Ui::Widget *ui;
QAction *copy;//示例菜单项一
QAction *cut; //示例菜单项二
在.CPP文件的构造函数:
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
copy = new QAction("Copy", ui->treeView); //初始化
cut = new QAction("Cut", ui->treeView);
//这里可以连接信号...
ui->treeView->addAction(copy); //给QTreeView的对象添加Action
ui->treeView->addAction(cut);
ui->treeView->setContextMenuPolicy(Qt::ActionsContextMenu);//设置右键菜单
}
OK了,经过测试,完全满足你的要求:在QTreeView上右击鼠标,就弹出有Copy和Cut两项内容的菜单
#10
跟着学习下!
#11
to 7楼:
不用派生,此函数是QTreeView的虚函数,只需在.h中声明,.cpp中重写一下即可
怎样重写?举个最最基本的例子给我就行了。
还有,我要的是当且仅当右击指定的节点时弹出菜单,而不是随便右击树形控件的某个地方就弹出菜单。用mousePressEvent能实现吗?
不用派生,此函数是QTreeView的虚函数,只需在.h中声明,.cpp中重写一下即可
怎样重写?举个最最基本的例子给我就行了。
还有,我要的是当且仅当右击指定的节点时弹出菜单,而不是随便右击树形控件的某个地方就弹出菜单。用mousePressEvent能实现吗?
#12
不知楼主后来撤销undo操作做得如何了?可否让我借鉴一下?