Ваш вопрос слишком общий, чтобы дать вам конкретный ответ, но наиболее очевидное решение - реализовать классы, наследуемые от QWidget, для каждого возможного компонента вашей системы. В вашем примере я могу визуализировать 2 отдельных компонента: фон и элементы управления. Фон будет хранить все данные изображения, такие как карты и видео, а элементы управления будут иметь кнопки для взаимодействия с системой. Вы даже можете разбить фон на разные классы для управления изображением или видео. Я рекомендую использовать центральный класс GUIController, который наследуется от QObject, для управления всеми взаимодействиями интерфейса, такими как подключение сигналов / слотов или реализация каких-либо анимаций. Таким образом, вы можете добавлять / управлять несколькими виджетами, не используя разные .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_;
}