0

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

我有一个名为 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) 保存在指向关联的链接中。小部件,以获取其位置。获取小部件的位置无法正常工作。不知道为什么...

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

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

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

4

1 回答 1

0
  1. 制作一个 topWidget。

  2. 将 SmartPoUp 和 SmartPanel 作为该父级的子级。

  3. 为 SmartPoUp 调用 raise()

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

于 2013-02-22T13:25:59.357 回答