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

我想知道为什么它不起作用? QMainWindow 直接继承自 QWidget。将 QWidget 放置在另一个 QWidget 中可以正常工作。

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

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

也许还有其他方法可以使用 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 的“promote to ...”功能一样。

这两个小部件(第一个基于QWidget,第二个基于QMainWindow)都具有基于标准qtcreator代码模板的相同默认结构。我在这里没有做太多改变——只是在表单设计器中添加了一些按钮。

在第二个示例中,我尝试在类实例上使用 setEnabled(true) 和 setVisible(true)。第一个没有结果。第二个在单独的窗口中打开这个小部件。

我认为最大的问题是 QMainWindow 嵌套在另一个 QWidget 中的可能性。正如我之前写的 QMainWindow 实例可以毫无问题地放置在 QTabWidgets 中。

最佳答案

遇到同样的问题,我找到了解决方案 here

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

window->setWindowFlags(Qt::Widget);

在构建 QMainWindow 之后。

关于Qt4:将 QMainWindow 实例放置在其他 QWidget/QMainWindow 中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6344886/

10-14 17:24