我想将 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/