问题描述
|
我想将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的“升级到...”功能相同。
这两个小部件(第一个基于QWidget,第二个基于QMainWindow)都具有基于标准qtcreator代码模板的相同默认结构。我在这里没有太大变化-只是在表单设计器中添加了一些按钮。
在第二个示例中,我尝试在类实例上使用setEnabled(true)和setVisible(true)。第一个没有结果。第二个在单独的窗口中打开此小部件。
我认为最大的问题是QMainWindow有什么嵌套在另一个QWidget中的可能性。正如我在QMainWindow实例可以放置在QTabWidgets内之前写的那样,没有任何问题。
解决方法
遇到同样的问题,我在这里找到了解决方案。
QMainWindow将其窗口类型设置为Qt :: Window,以便即使有父窗口也将位于一个独立的窗口中(您可以通过在QMainWindow上调用show()进行确认,并在自己的窗口中看到它)。尝试添加线
window->setWindowFlags(Qt::Widget);
在构造QMainWindow之后。
, centralwidget = new QMainWindow(this);
centralwidget->setWindowFlags(Qt::Widget);
setCentralWidget(centralwidget);
这应该有所帮助。
, “ 4”以与平台无关的方式提供了预定义的内容,例如工具栏,状态栏和菜单栏(“做正确的事”,而无需人工干预)。如果您只需要布局中的一堆按钮,请使用QWidget
。
您需要确保每个QMainWindow has central
QWidget`,除此之外,您应该没问题。