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

| 我想将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`,除此之外,您应该没问题。     

要回复问题请先登录注册