2013-02-22 2 views
0

Я знаю, что есть ответы, но они не удовлетворяют мой вопрос. Это не работает для меня.Позиция всплывающее окно над QWidget во время выполнения

У меня есть простой пользовательский виджет под названием PopUp. Он наследует SmartPanel, который является стиль панели и содержит только:

setWindowFlags(Qt::Window | Qt::FramelessWindowHint); 
setAttribute(Qt::WA_QuitOnClose, true); 
setAttribute(Qt::WA_TranslucentBackground); 

Это показывает окно, которое должно появиться на кнопку вы нажимаете, что выскакивает вверх или закрывается. если вы входите и выходите из него, он закрывается сам по себе.

Я пробовал:

А), что делает его ребенка кнопки, поэтому там, где кнопка движется, движется. Очевидно, должно работать. Что ж. Не работает вообще ... Он всегда остается на 0,0 в левом верхнем углу окна. Я даже перемещаю окно, кнопка перемещается, и всплывающее окно остается тем же ... даже будучи его ребенком !.

SmartPopUp::SmartPopUp(QWidget *parent): SmartPanel(parent) 
{ 
    setContentsMargins(30,10,20,20); 
    hide(); 
    QVBoxLayout* lyt = new QVBoxLayout(); 
    setLayout(lyt); 
} 

B) Сохранение в виде ссылки на доц. виджет, чтобы получить свою позицию. Получение положения виджета не работает должным образом. Не знаю, почему ...

SmartPopUp::SmartPopUp(QWidget* associatedWidget, QWidget *parent): SmartPanel(parent) 
{ 
    associatedWidget_ = associatedWidget; 
    setContentsMargins(30,10,20,20); 
    hide(); 

    QVBoxLayout* lyt = new QVBoxLayout(); 
    setLayout(lyt); 
} 

Как заставить его перемещаться вместе с изменяющимся положением кнопки?

ответ

0
  1. Сделайте topWidget.

  2. Сделайте SmartPoUp и SmartPanel в качестве детей для этого родителя.

  3. Вызов Рейз() для SmartPoUp

  4. переописать moveEvent для SmartPanel и переместить SmartPopup, а также в соответствии с новым положением SmartPanel.

+0

... Это не должно быть с положением НА НАКОНЕ. Что вы подразумеваете под «для этого родителя» ?. Какой исходный вопрос. Как получить позицию кнопки и поместить ее всегда в одно и то же место, а не просто QCursor :: pos(). X() ... и y() – darkgaze

Смежные вопросы