setCentralWidget()方法中的central一词并不代表重要性,但如果您查看具有QMainWindow的布局,将看到它位于中央位置:
假设在上面的中央小部件框中,我对称地放置了两个QLabel,其相对于确切中心点是对称的。在这种情况下,哪个QLabel应该是中心小部件?任何一个都可以吗?
您不需要选择,您可以让这两个QLabel成为centralWidget的一部分,centralWidget只是指中央位置,例如:
#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();
}
如果两个小部件都可以,为什么设置中央小部件对QMainWindow如此重要?
你不一定需要设置一个中央小部件,但是与其他小部件不同,QMainWindow已经有了特定的布局,如果你想放置小部件,就必须使用那种方法。
中央小部件是相对位置,但不完全是中心位置:
#include <QtWidgets>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMainWindow w;
QLabel *central_widget = new QLabel("Central Widget");
central_widget->setAlignment(Qt::AlignCenter);
w.setCentralWidget(central_widget);
QDockWidget *dock = new QDockWidget("left");
w.addDockWidget(Qt::LeftDockWidgetArea, dock);
dock->setWidget(new QTextEdit);
w.show();
return a.exec();
}