Пользовательский класс в Qt Creator

Я новичок в Qt и довольно новичок в C++, но мне нужна помощь в этом вопросе. У меня есть собственный класс, называемый HybridStack, и я хочу, чтобы он расширял QStackedWidget и QMainWindow. Я хочу, чтобы он расширял QStackedWidget, чтобы я мог использовать столько страниц, сколько мне нужно, и я хочу, чтобы он расширял QMainWindow, чтобы я мог иметь на каждой странице свой собственный MenuBar с различным содержанием меню для другой страницы.

Я хочу добавить этот собственный класс HybridStack в Qt Designer, продвигая его из QStackedWidget.

Это возможно? Если да, не могли бы вы рассказать мне, как это сделать? Если это невозможно, то какова альтернатива? Самое главное, мне нужно использовать его в дизайнере, потому что мне нужно использовать qmake

1 ответ

Вы не можете наследовать как QStackedWidget, так и QMainWindow, потому что оба они в свою очередь являются производными от QWidget. Если бы вы сделали это, вы бы получили Dreaded Diamond. Вы должны будете использовать композицию вместо этого.

Даже тогда я не уверен, будет ли работать правильно, чтобы поместить QMainWindow в QStackedWidget, так как он предназначен для элемента верхнего уровня (то есть, он показан непосредственно как окно, а не встроен в другой QWidget). Другой способ выполнить то, что вы хотите (изменение строки меню при смене вкладок), заключается в следующем:

  1. Сделайте ваш элемент верхнего уровня QMainWindow
  2. Сделайте центральный виджет пользовательским виджетом, производным от QStackedWidget
  3. Когда элемент, отображаемый в виджете стека, изменяется, вы можете вызвать QMainWindow::setMenuBar, чтобы изменить строку меню. Каждый виджет в QStackWidget может иметь свой собственный экземпляр QMenuBar, который он использует для этой цели.
Другие вопросы по тегам