请教关于QTreeWidget的若干问题

prettyknight 2010-12-16 03:24:11
1、如何为QTreeWidget添加右键菜单?要求右击部分节点后会弹出这个菜单。
2、节点移动功能已实现,但有部分节点不允许拖动后成为根节点,请问该如何实现?
3、如何让QTreeWidget实现:按Ctrl+z后Undo,按Ctrl+r后Redo?比如说:撤销或重做节点的重命名。
...全文
630 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhongyi0417 2012-06-12
  • 打赏
  • 举报
回复
不知楼主后来撤销undo操作做得如何了?可否让我借鉴一下?
prettyknight 2010-12-19
  • 打赏
  • 举报
回复
to 7楼:

不用派生,此函数是QTreeView的虚函数,只需在.h中声明,.cpp中重写一下即可

怎样重写?举个最最基本的例子给我就行了。

还有,我要的是当且仅当右击指定的节点时弹出菜单,而不是随便右击树形控件的某个地方就弹出菜单。用mousePressEvent能实现吗?
wsy87217 2010-12-17
  • 打赏
  • 举报
回复
跟着学习下!
  • 打赏
  • 举报
回复
用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两项内容的菜单
  • 打赏
  • 举报
回复
瞎说了一句,==,我测试一个方法如果好了再说
  • 打赏
  • 举报
回复
不用派生,此函数是QTreeView的虚函数,只需在.h中声明,.cpp中重写一下即可
prettyknight 2010-12-17
  • 打赏
  • 举报
回复
如果用楼上的方法,岂不是要写QTreeView的派生类了吗?
我的界面比较复杂,这样做会大大增加界面设计的难度。
  • 打赏
  • 举报
回复
void QTreeView::mousePressEvent ( QMouseEvent * event )
{
if(event->button() == Qt::RightButton)
{
弹出菜单;
}
}

Undo系统麻烦一些,查查资料如果有再来
prettyknight 2010-12-16
  • 打赏
  • 举报
回复
1:应该不那么简单,我试过好几种方法了,楼上说的、SIGNAL(customContextMenuRequested(const QPoint&))……都没成功。理论上可以写控件的派生类然后用contextMenuEvent()来实现,问题是我的界面整体比较复杂,这样做会加大界面设计的难度。
sduxiaoxiang 2010-12-16
  • 打赏
  • 举报
回复
设置role

响应键盘事件
prettyknight 2010-12-16
  • 打赏
  • 举报
回复
1:我要求的是右击后才弹出菜单。如果用itemClicked的话好像左击也会弹出菜单,那就不符合要求了
2:把什么对象设置为根节点?把什么属性设为不可移动?我找了很久,发现不容易找到:
wyjam 2010-12-16
  • 打赏
  • 举报
回复
1,创建QMenu然后,itemClicked信号对应写个槽实现菜单弹出。
2,设置为根节点,对应的属性设置为不可移动。
3,第三个没有遇到,可能要捕捉键盘消息。作处理。QTreeWidgetItem。

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧