在QMainWindow中选择“中央小部件”的规则是什么?为何如此重要?

时间:2019-02-18 14:13:05

标签: c++ qt qt5 qmainwindow

我了解 QMainWindow 实现中需要 setCentralWidget ,而且乍一看,这似乎非常不言自明。但是,“ central ”是否有更严格的定义?

说,我在窗口的中央区域有几个同等重要的窗口小部件,我是否应该总是找到一种将它们组合在一起并将组设置为中央窗口小部件的方法?还是我可以随机选择一个?

更重要的是,非中央小部件会发生什么?中央窗口小部件和非中央窗口小部件之间是否存在某些差异,可能会在以后影响其行为?

Qt文档对此没有任何说明,除了简单地声明中央小部件很重要之外,这不是很有帮助。

2 个答案:

答案 0 :(得分:2)

ImportDecl方法中的 central 单词与重要性无关,但是如果您检查具有QMainWindow的布局,我们将看到它位于居中位置:< / p>

enter image description here

  • 我是否应该总是找到一种将它们分组在一起并将组设置为中央小部件的方法?还是我可以随机选择一个?只能有一个中央窗口部件,因此,如果要在中央位置放置多个窗口部件,则必须创建一个新的窗口部件作为容器,并通过布局设置其他窗口部件。

  • 非中央小部件会发生什么?中央窗口小部件和非中央窗口小部件之间是否存在某些差异,这些差异稍后可能会影响它们的行为?没有区别。


在上方的中心小部件框中说,我相对于确切的中心点对称地放置了两个QLabel。在这种情况下,哪个QLabel应该是中央小部件?哪一个很好?

您不必选择,您可以将2个QLabels成为centralWigdet的一部分,centralwidget仅指中心位置,例如:

setCentralWidget()

enter image description here

如果任何一个小部件都很好,为什么QMainWindow如此迫切地要求设置中央小部件?

您不必一定要设置一个中央窗口小部件,但是QMainWindow与其他窗口小部件不同,它已经具有一定的布局,因此,如果要放置这些窗口小部件,则必须使用该方法。

中央小工具指的是相对位置,但不完全是中央位置:

#include <QtWidgets>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QMainWindow w;
    QLabel left_label("left");
    left_label.setAlignment(Qt::AlignCenter);
    QLabel right_label("rigth");
    right_label.setAlignment(Qt::AlignCenter);
    QWidget *central_widget = new QWidget;
    QHBoxLayout *lay = new QHBoxLayout(central_widget);
    lay->addWidget(&left_label);
    lay->addWidget(&right_label);
    w.setCentralWidget(central_widget);
    w.show();
    return a.exec();
}

enter image description here

答案 1 :(得分:0)

通常您不需要QMainWindow

如果您既不需要停靠也不需要MDI,则不要使用QMainWindowQWidgetQDialog可以代替。

中心的意思是“在中间”,而不是在“中间!”中。 QMainWindow提供了停靠和多文档界面(MDI)功能,因此中央小部件的概念很有用。只能有一个中央小部件,因此“应将多个中的一个”设置为中央是没有意义的:您不能有多个。 Qt对象设计的基本方面之一是QObject是其他对象的容器,而QWidget也是如此:这是一个可以放置其他小部件的画布。因此,如果您绝对需要停靠和/或MDI,则中央小部件将是您放置其他非停靠小部件的任何QWidget。就这些。