你的問題太籠統了,不能給你一個特定的答案,但最明顯的解決方案是實現從QWidget繼承的類爲你的系統的每個可能的組件。在你的例子中,我可以看到兩個不同的組件:背景和控件。背景將存儲所有圖像數據,如地圖和視頻,而控件將具有與系統交互的按鈕。你甚至可以將背景分成不同的類來管理圖像或視頻。我建議使用從QObject繼承的中央GUIController類來管理所有接口交互,如連接信號/插槽或實現任何動畫,這樣您可以添加/管理多個小部件,而無需通過不同的.cpp文件。
編輯:隨着您的評論,似乎你的主要問題是,你的鼠標事件沒有傳播到你的小部件,如你所料。可能的原因是你沒有設置組件之間的父/子關係。請確保您所呼叫的默認構造函數QWidget的在您的自定義小部件類像上面:
CustoWidget(QWidget *parent = 0, Qt::WFlags flags = 0) : QWidget(parent, flags)
{
//your code here
}
當創建一個Controller類,集中的組件之間的正確關係。在您的系統的情況下,作用似乎對我來說,所有組件都將被添加爲背景的孩子,所以它看起來象下面這樣:
class Controller : public QObject
{
public:
Controller(QObject *parent = 0, Qt::WFlags flags = 0) : QObject(parent, flags)
{
wdg_back_= new BackWidget(this);
wdg_control_ = new Controls(wdg_back);
wdg_1_ = new GenericWidget(wdg_back);
//connect your signals/slots, etc
}
private:
BackWidget *wdg_back_;
Controls *wdg_control_;
GenericWidget *wdg_1_;
}
這就是我遵循的方法,我將所有控件分組到一個小部件中,其中包含適當的佈局。但問題是,即使屏幕上分散了一些小部件,此控件Widget佔據整個屏幕並阻止鼠標單擊事件。我相信可以解決這個問題的另一件事是,將堆疊小部件上的控件逐個添加爲單獨的圖層。這樣他們只會阻止在它們上面的鼠標點擊。 – Victor 2012-02-07 13:51:26
您確定要將所有小部件添加爲此控件/背景部件的子項嗎?確保你的自定義小部件構造函數調用QWidget默認構造函數,並且在GUI初始化過程中將持有者小部件(可能是背景)設置爲所有小部件的父親。 – 2012-02-07 14:27:27
這個問題似乎是這裏討論的問題:http://www.qtcentre.org/threads/45844-Mouse-events-with-StackAll-QStackedLayout 由於我使用了一個有兩個小部件的堆棧佈局(背景和控件控件),頂部的控件控件將阻止所有鼠標單擊事件。 我會嘗試將控件設置爲背景的子項,而不是他們是兄弟。 – Victor 2012-02-07 15:19:52