我环顾四周,似乎问题不仅出现在树形部件中,而且也出现在其他小部件上。但就我而言,我找到了一个解决方案,尽管是一个不完整的方案。我将操作添加到我的树部件中,以便在右键单击它时出现一个包含这些操作的弹出窗口。但是,当我将项目添加到我的树窗口小部件中并右键单击它们时,会出现相同的弹出窗口。 我想要做的是,当您右键单击树窗口小部件时,会出现一个树窗口小部件弹出菜单,当您右键单击项目时,会出现另一个相应的弹出式菜单。有谁知道如何做到这一点?QTreeWidget右键菜单
9
A
回答
14
首先,你应该设置自定义快捷菜单政策:
treeView->setContextMenuPolicy(Qt::CustomContextMenu);
然后你就可以连接到QWidget::customContextMenuRequested(const QPoint&)
信号,并显示您的上下文菜单。
2
看看重载QAbstractItemModel并提供您自己的OnContextMenuRequested。通过此功能,您可以让不同的项目创建不同的上下文菜单。
下面是我的项目可能会有所帮助的一个部分缩短伪ISH代码:
void MyModel::OnContextMenuRequested(const QModelIndex& index, const QPoint& globalPos)
{
// find 'node' corresponding to 'index'
vector<pair<string,BaseNode*> > actions = node->GetActions(true);
if(actions.size()==0) return;
// the ptr list helps us delete the actions
boost::ptr_list<QObject> actionPtrList;
QList<QAction*> qtActions;
for(unsigned int i=0;i<actions.size();i++)
{
QAction* act = new QAction(actions[i].first.c_str(),NULL);
act->setData(qVariantFromValue(actions[i].second));
actionPtrList.push_back(act);
qtActions.append(act);
}
// create and show the context menu
QMenu *menu = new QMenu("Item actions",NULL);
actionPtrList.push_back(menu);
QAction* act = menu->exec(qtActions,globalPos);
if(act==NULL) return;
// act on the resulting action 'act'
}
+1
虽然没有理由在模型中。这是一个信号,这个模型通常不会知道。 –
14
首先,配置QTreeWidget到响应(发出信号),单击鼠标右键:
treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
二,将信号与插槽“MainWindow :: prepareMenu”连接起来:
connect(treeWidget,&QTreeWidget::customContextMenuRequested,this,&MainWindow::prepareMenu);
三,创建上下文菜单在插槽:
void MainWindow::prepareMenu(const QPoint & pos)
{
QTreeWidget *tree = treeWid;
QTreeWidgetItem *nd = tree->itemAt(pos);
qDebug()<<pos<<nd->text(0);
QAction *newAct = new QAction(QIcon(":/Resource/warning32.ico"), tr("&New"), this);
newAct->setStatusTip(tr("new sth"));
connect(newAct, SIGNAL(triggered()), this, SLOT(newDev()));
QMenu menu(this);
menu.addAction(newAct);
QPoint pt(pos);
menu.exec(tree->mapToGlobal(pos));
}
相关问题
- 1. QTreeWidget上的弹出菜单右键点击python
- 2. 菜单左,右键菜单
- 3. Tampermonkey - 右键菜单
- 4. NSWindow - 右键菜单
- 5. NSStatusItem右键单击菜单
- 6. NSEvent单击右键菜单
- 7. 发送菜单键(右键单击)
- 8. Gmap3标记右键菜单
- 9. Codeigniter - 动态右键菜单
- 10. jQuery菜单滑动右键
- 11. 的右键菜单问题
- 12. Firefox右键菜单太长
- 13. PyQt右键菜单QComboBox
- 14. 拖放右键菜单
- 15. 从Windows右键菜单
- 16. 与AxOWC11.AxSpreadsheet右键菜单
- 17. Chrome右键单击上下文菜单
- 18. 右键单击菜单选项
- 19. 右键单击后不显示菜单
- 20. winforms下的右键单击菜单
- 21. 右键单击上下文菜单jquery
- 22. 在PowerBuilder中右键单击(菜单)
- 23. 禁用JFreeChart的右键单击菜单
- 24. 调整WebStorm右键单击新菜单
- 25. Xpages右键单击上下文菜单
- 26. 右键单击上下文菜单
- 27. JQuery右键单击上下文菜单
- 28. 右键单击和菜单栏菜单如何工作?
- 29. 右键单击从菜单中选择的菜单
- 30. 编辑右键上下文菜单7
这似乎是更复杂,我打了。所以实际上我需要将customContextMenuRequested信号连接到我的插槽? – ISTB
是的,您应该有一个插槽,在捕获该信号后显示您的自定义上下文菜单。 – hank