你的问题太笼统了,不能给你一个特定的答案,但最明显的解决方案是实现从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