在运行时将弹出窗口放在QWidget上

时间:2013-02-22 11:18:05

标签: qt inheritance popup position qwidget

我知道有答案,但他们不满足我的问题。它不适合我。

我有一个名为PopUp的简单自定义小部件。 它继承了SmartPanel,它是一个样式面板,只包含:

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

它会显示一个窗口,该窗口应显示在您按下的按钮上,弹出或关闭。如果你进入并离开它,它会自行关闭。

我试过了:

A)使其成为按钮的子项,因此按钮移动的位置会移动。显然应该工作。好。根本不起作用......它始终保持在窗口左上角的0,0处。我甚至移动窗口,按钮移动,弹出窗口保持不变......即使是它的孩子!。

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

B)保存在assoc的链接中。小部件,以获得它的位置。获取窗口小部件的位置不正常。不知道为什么......

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

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

如何让它与按钮位置的变化一起移动?

1 个答案:

答案 0 :(得分:0)

  1. 制作一个topWidget。

  2. 将SmartPoUp和SmartPanel设为此父级的子级。

  3. 为SmartPoUp调用raise()

  4. 为SmartPanel重新实现moveEvent,并根据SmartPanel的新位置移动您的SmartPopup。