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

9

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

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

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

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

也许有其他方法可以在QtCreator中将工具栏放置在普通的QWidget中吗?


编辑

第一个示例(正常工作)

我基于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实例可以放置在QTabWidget中而没有任何问题。

1
你能详细说明发生了什么吗?当你说“它不起作用”时,实际上会发生什么?它会出现错误还是根本没有显示任何内容? - O.C.
我提供了进一步的描述。在第二个例子中没有错误,什么也没有显示出来。 - user666491
3个回答

14

我遇到了同样的问题,我在这里找到了解决方案。

QMainWindow将其窗口类型设置为Qt :: Window,以便即使它有父对象,它也将位于独立窗口中(您可以通过对QMainWindow调用show()来确认此内容,并且您将在其自己的窗口中看到它)。尝试添加以下行:

window->setWindowFlags(Qt::Widget);

在构建QMainWindow之后。


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

这应该会有所帮助。


-3

QMainWindow以跨平台的方式提供了预定义的工具栏、状态栏和菜单栏(它“自动处理”,无需手动干预)。如果您只需要在布局中放置一堆按钮,请使用QWidget

您需要确保每个QMainWindow有一个中心QWidget`,除此之外,您应该没问题。


我知道QMainWindow是什么。这篇文章根本没有回答我的问题。 - user666491
1
如果你的问题是“我想知道为什么它不起作用?”,那么我尝试回答得像问题本身一样精确。只有一件事可以阻止你做你想做的事情:没有中央小部件。你可以在QTabBar的每个选项卡内创建自己的布局和工具栏。请说明你想要什么,至少提供一些代码和/或错误消息。我无法读取你的思维。 - rubenvb
我提供了问题的进一步描述。我认为我的问题很简单明了。没有任何错误,非常简单。不管怎样,感谢您的帮助 :) - user666491

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接