Qt4: Размещение экземпляра QMainWindow внутри другого QWidget / QMainWindow

Я хотел бы разместить экземпляр QMainWindow внутри другого QWidget (например, centralWidget другого QMainWindow).

Интересно, почему это не работает? QMainWindow наследуется напрямую от QWidget. Размещение QWidget внутри другого QWidget работает нормально.

Я часто помещаю экземпляры QMainWindow в QTabBar без каких-либо проблем.

ps Вы можете спросить, зачем мне использовать QMainWindow? Я хочу разместить 2 виджета внутри 1 формы, используя вертикальную компоновку. Я хочу, чтобы у обоих виджетов были отдельные панели инструментов непосредственно над ними.

Может быть, есть другой способ разместить панели инструментов внутри простых QWidgets с помощью QtCreator?


Изменить

Первый пример (отлично работает)

Я создаю новый класс / form на основе QWidget. (QtCreator создает 3 файла * .cpp, * .h и * .ui на основе стандартных шаблонов.)

Объявление класса выглядит так

class NotesEditor : public QWidget
{
    Q_OBJECT

public:
    explicit NotesEditor(QWidget *parent = 0);
    ~NotesEditor();

private:
    Ui::NotesEditor *ui;
};

Когда я пытаюсь использовать этот виджет и поместить его в другой виджет, он отлично работает. Я использовал функцию qtcreator "повысить до ..." - здесь нет проблем.

Второй пример (не работает)

Я создаю новый класс / форму на основе QMainWindow. (QtCreator создает 3 файла * .cpp, * .h и * .ui на основе стандартных шаблонов.)

Объявление класса выглядит так:

class Notes : public QMainWindow
{
    Q_OBJECT

public:
    explicit Notes(QWidget *parent = 0);
    ~Notes();

private:
    Ui::Notes *ui;
};

И теперь, когда я пытаюсь поместить этот виджет в другой виджет, он не отображается.Как и раньше, я использовал функцию qtcreator «продвинуть до ...»

Оба виджета (первый на основе QWidget, второй на основе QMainWindow) имеют одинаковую структуру по умолчанию, основанную на стандартных шаблонах кода qtcreator. Я здесь особо не изменил - просто добавил несколько кнопок в конструктор форм.

Во втором примере я попытался использовать setEnabled (true) и setVisible (true) в экземпляре класса. Первый не дает результатов. Второй открывает этот виджет в отдельном окне.


Я думаю, что большой вопрос заключается в том, что позволяет QMainWindow быть вложенным в другой QWidget. Как я уже писал ранее, экземпляры QMainWindow можно без проблем разместить внутри QTabWidgets.

7
задан 15 June 2011 в 13:43
поделиться