У меня есть проблема с поиском QMenu во время выполнения. menu->pos()
должен отправить свое сообщение назад, но он отправляет QPoint(0,0)
. Чтобы найти свое реальное положение, я должен открыть это меню и навести QAction.Ищете реальную позицию QMenu
Есть ли способ инициализировать правильное положение меню, не открывая вручную это меню?
Идея показывает пользователю, где он (а) может найти вариант, и с помощью 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_H
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
* Чтобы найти свое реальное положение * - Что вы подразумеваете под ** реальной позицией **? Поскольку состояние Qt docs для [pos] (http://doc.qt.io/qt-5/qwidget.html#pos-prop): * «Это свойство занимает позицию виджета в своем родительском виджетах». * Поэтому он возвращается правильно, так как его позиция (0,0) относительно MainWindow. – TheDarkKnight
Как вы можете видеть на этом изображении: https://lut.im/FRDsH1pu/xNdjjPg5, первый 'pos()' возвращает 'QPoint (0,0)', но после зависания действия в меню 'pos () 'возвращает позицию меню на экране. Я хотел бы получить эту позицию напрямую. – Astalaseven
Извините, но я не совсем уверен, о чем вы спрашиваете * * прямо забирайте эту позицию *. Похоже, вы получаете позиции, о которых вы просите. – TheDarkKnight