在运行时定位我的QMenu有一些问题。menu->pos()应该把他的位置送回去,但是它会把QPoint(0,0)送回去。要找到它的真正位置,我必须打开该菜单并悬停一个QAction。
是否有一种方法来初始化正确的菜单位置而不手动打开该菜单?
这样做的目的是向用户展示他可以在哪里找到一个选项,而在没有正确位置的情况下使用exec或popup无助于…。
mainwindow.cpp (QMAKE_CXXFLAGS += -std=c++11)
#include "mainwindow.h"
#include <QMenu>
#include <QMenuBar>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
QMenuBar * menuBar = new QMenuBar(this);
QMenu * menu = new QMenu("File", this);
menu->addAction("Action0");
menuBar->addMenu(menu);
qDebug() << menu->pos();
connect(menu, &QMenu::hovered, this, [menu] {
qDebug() << menu->pos();
});
setMenuBar(menuBar);
}
MainWindow::~MainWindow()
{
}mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
};
#endif // MAINWINDOW_Hmain.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}发布于 2017-02-24 17:04:43
嗯..。我知道现在有点晚,但是,有两件事:
moveEvent可能是一个很好的位置,如果窗口移动,您已经更新了该位置)。QMenuBar::mapToGlobal将本地位置映射到屏幕坐标。https://stackoverflow.com/questions/31982565
复制相似问题