问题4:将QMainWindow实例放置在其他QWidget/QMainWindow中



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

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

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

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

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


编辑

第一个示例(效果良好)

我基于QWidget创建了新的类/表单。(QtCreator基于标准模板创建了三个文件*.cpp、*.h和*.ui)。

类声明看起来像这个

class NotesEditor : public QWidget
{
    Q_OBJECT
public:
    explicit NotesEditor(QWidget *parent = 0);
    ~NotesEditor();
private:
    Ui::NotesEditor *ui;
};

当我尝试使用这个小部件并将其放置在另一个小部件中时,它工作得很好。我使用了qtcreator的"升级到…"功能-这里没有问题。

第二个例子(不起作用)

我基于QMainWindow创建了新的类/表单。(QtCreator基于标准模板创建了三个文件*.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);

这应该会有所帮助。

QMainWindow以一种与平台无关的方式提供了预定义的东西,如工具栏、状态栏和菜单栏(它"做了正确的事情",无需手动干预)。如果您只需要布局中的一堆按钮,请使用QWidget

你需要确保每个QMainWindow has central QWidget`,除此之外,你应该没事。

相关内容

  • 没有找到相关文章

最新更新