Пользовательский класс в Qt Creator
Я новичок в Qt и довольно новичок в C++, но мне нужна помощь в этом вопросе. У меня есть собственный класс, называемый HybridStack, и я хочу, чтобы он расширял QStackedWidget и QMainWindow. Я хочу, чтобы он расширял QStackedWidget, чтобы я мог использовать столько страниц, сколько мне нужно, и я хочу, чтобы он расширял QMainWindow, чтобы я мог иметь на каждой странице свой собственный MenuBar с различным содержанием меню для другой страницы.
Я хочу добавить этот собственный класс HybridStack в Qt Designer, продвигая его из QStackedWidget.
Это возможно? Если да, не могли бы вы рассказать мне, как это сделать? Если это невозможно, то какова альтернатива? Самое главное, мне нужно использовать его в дизайнере, потому что мне нужно использовать qmake
1 ответ
Вы не можете наследовать как QStackedWidget, так и QMainWindow, потому что оба они в свою очередь являются производными от QWidget. Если бы вы сделали это, вы бы получили Dreaded Diamond. Вы должны будете использовать композицию вместо этого.
Даже тогда я не уверен, будет ли работать правильно, чтобы поместить QMainWindow в QStackedWidget, так как он предназначен для элемента верхнего уровня (то есть, он показан непосредственно как окно, а не встроен в другой QWidget). Другой способ выполнить то, что вы хотите (изменение строки меню при смене вкладок), заключается в следующем:
- Сделайте ваш элемент верхнего уровня QMainWindow
- Сделайте центральный виджет пользовательским виджетом, производным от QStackedWidget
- Когда элемент, отображаемый в виджете стека, изменяется, вы можете вызвать QMainWindow::setMenuBar, чтобы изменить строку меню. Каждый виджет в QStackWidget может иметь свой собственный экземпляр QMenuBar, который он использует для этой цели.