Qt4:将QMainWindow实例放置在其他QWidget/QMainWindow中

Qt4:将QMainWindow实例放置在其他QWidget/QMainWindow中,qt,qt4,qt-creator,qwidget,qmainwindow,Qt,Qt4,Qt Creator,Qwidget,Qmainwindow,我想将QMainWindow实例放在另一个QWidget中(例如,另一个QMainWindow的centralWidget) 我想知道为什么它不起作用?QMainWindow直接从QWidget继承。将QWidget放在另一个QWidget中效果很好 我经常在qtabar中放置QMainWindow实例,没有任何问题 ps您可能会问我为什么需要使用QMainWindow?我想使用垂直布局在一个表单中放置两个小部件。我希望两个小部件都有单独的工具栏直接覆盖在它们上面 也许有其他方法可以使用QtCr

我想将QMainWindow实例放在另一个QWidget中(例如,另一个QMainWindow的centralWidget)

我想知道为什么它不起作用?QMainWindow直接从QWidget继承。将QWidget放在另一个QWidget中效果很好

我经常在qtabar中放置QMainWindow实例,没有任何问题

ps您可能会问我为什么需要使用QMainWindow?我想使用垂直布局在一个表单中放置两个小部件。我希望两个小部件都有单独的工具栏直接覆盖在它们上面

也许有其他方法可以使用QtCreator将工具栏放置在普通QWidgets中


编辑

第一个示例(效果很好)

我基于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中。

QMainWindow
以平台无关的方式提供预定义的东西,如工具栏、状态栏和菜单栏(它“做正确的事情”,无需手动干预)。如果您只需要在布局中使用一组按钮,请使用
QWidget

您需要确保每个
QMainWindow都有中央
QWidget`,除此之外,您应该没事

centralwidget = new QMainWindow(this);
centralwidget->setWindowFlags(Qt::Widget);
setCentralWidget(centralwidget);

这应该会有帮助。

有同样的问题,我找到了解决办法

QMainWindow将其窗口类型设置为Qt::window,这样即使它有父窗口,它也将位于独立窗口中(您可以通过在QMainWindow上调用show()来确认这一点,并且您将在它自己的窗口中看到它)。尝试添加行

window->setWindowFlags(Qt::Widget);

在您构建QMainWindow之后。

我知道什么是QMainWindow。这篇文章根本没有回答我的问题。好吧,如果你的问题是“
我想知道为什么它不起作用?
”,我试着回答得和问题本身一样精确。只有一件事可以阻止你做你想做的事情:没有中央部件。您可以在QTabar的每个选项卡内使用工具栏创建自己的布局。指定您的目标,并至少提供一些代码和/或错误消息。我看不懂你的心思。我提供了问题的进一步描述。我认为我的问题很简单。没有错误,非常简单。不管怎样,谢谢你的帮助:)你能详细说明到底发生了什么吗。当你说“它不起作用”时,实际发生了什么?它是给出了一个错误还是什么都没有显示?我提供了进一步的描述。没有错误,第二个示例中没有显示任何内容。指向解决方案的链接已断开