我以标准方式创建上下文菜单:
QMenu contextMenu(tr("Context menu"), this);
QAction action1(tr("Копировать"), this);
QAction action2(tr("Выделить все"), this);
contextMenu.addAction(&action1);
contextMenu.addAction(&action2);
contextMenu.exec(mapToGlobal(pos));
但是弹出的窗口原来是模态的——它会阻塞流程,直到我选择某些东西或取消菜单的打开,例如,使用按钮Esc
。
我使用 QEventLoop,它允许我在一个线程中处理用户事件并执行一些其他简单的操作——处理文件、简单的重复计算。
试图强制菜单是非模态的:
contextMenu.setWindowModality(Qt::WindowModality::NonModal);
但之后的菜单停止出现。我也尝试使用
contextMenu.show();
и
contextMenu.popup(mapToGlobal(pos));
但这也无济于事。
有谁知道如何使上下文菜单成为非模态菜单,或者为什么contextMenu.setWindowModality(Qt::WindowModality::NonModal);
菜单在强制安装后停止出现?
QEventLoop
我用的是PavelK的方法,没有问题。