2013-02-22 62 views
0

我知道有答案,但它們不能滿足我的問題。這不適合我。位置在運行時在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)保存在關聯的鏈接。小工具,以獲得其位置。獲取小部件的位置不能正常工作。不知道爲什麼...

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

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

如何使它與按鈕的位置變化一起移動?

回答

0
  1. 設爲首頁小工具。

  2. 使SmartPoUp和SmartPanel成爲這個家長的孩子。

  3. 呼叫加薪()用於SmartPoUp

  4. 重新實現moveEvent爲SmartPanel和移動你的SmartPopup以及根據SmartPanel的新位置。

+0

...這並不一定要在按鈕上的位置。 你對「這位父母」是什麼意思?這是原來的問題。如何獲得按鈕的位置並將其始終放在同一個地方,而不是簡單的QCursor :: pos()。x()...和y() – darkgaze 2013-02-27 09:00:05