在我的Qt应用程序中,我设计了带有几个图标的状态栏。在我的状态栏左侧,我添加了菜单图标(QPixmap),当我点击该图标时,我需要显示类似于PC开始菜单的菜单。我搜索了很多但没有找到适用于此的QWidget。
这是我的Qt应用程序窗口。
根据我最近的评论,我在下面添加了我的编辑代码,因为我不能在评论部分添加代码,请建议一个解决方案。
这是我的Qt应用程序窗口。
根据我最近的评论,我在下面添加了我的编辑代码,因为我不能在评论部分添加代码,请建议一个解决方案。
//Menu Button
menuBtn->setIcon(QPixmap(":/new/prefix1/ic_menu_black.png"));
statusBar()->addWidget(menuBtn);
connect(menuBtn,SIGNAL(clicked(bool)),this,SLOT(showPopupMenu()));
void MainWindow::showPopupMenu(){
QMenu qMenuStart;
QAction qCmdStart1(QString::fromUtf8("Product Details"), &qMenuStart);
qMenuStart.addAction(&qCmdStart1);
QAction qCmdStart2(QString::fromUtf8("Memory Status"), &qMenuStart);
qMenuStart.addAction(&qCmdStart2);
QObject::connect(&qCmdStart1, &QAction::triggered,[](bool){
qDebug() << "Product Details triggered"; }
);
QObject::connect(&qCmdStart2, &QAction::triggered,[](bool){
qDebug() << "Memory Status triggered"; }
);
qMenuStart.exec();
menuBtn->setMenu(&qMenuStart);
qMenuStart.show();
qMenuStart.popup(mapToGlobal(pos() - QPoint(0, qMenuStart.height())));
qDebug()<<"Menu Clicked!";
}
在菜单按钮上单击后弹出菜单。
QTreeView
中放置上下文菜单。第一个是使用QMenu::popup()
打开菜单,并接受一个位置参数。另一个是QWidget::mapToGlobal()
,这个方法非常有用。如果菜单应该在按钮上方打开,则必须适当地考虑这一点(例如通过从标签/按钮的全局映射y位置中减去菜单的高度来实现)。 - Scheff's CatqMenuStart.exec()
的作用。我担心在将菜单分配给menuBtn
之前,它会打开菜单,因此任何定位都不会被考虑。为什么不将QMenu
设为MainWindow
的成员,并一次性配置它(与menuBtn
和statusBar
一起)。这样,qMenuStart.exec()
就变得过时了。 - Scheff's CatqMenuStart.exec();
。你可能在想菜单不会显示在qMenuStart.popup()
上。实际上,它确实显示了,但是它立即被销毁(从MainWindow::showPopupMenu()
返回时)因为它是一个局部实例。(我的第一个猜测是崩溃,但现在我相信 Qt 能够管理它。)然而,解决方案仍然像我之前的评论建议的那样。 - Scheff's Cat