Qt中如何设置central widget fill in the whole main window
How to set central widget fill in the whole main window in Qt
我有一个像这样的最小示例:
mWidget = new QWidget;
vLayout = new QVBoxLayout;
mLabel = new QLabel;
mLabel->setText("Text");
mLabel->setAlignment(Qt::AlignCenter);
mLabel->setStyleSheet("QLabel { border: 2px solid red; }");
this->setCentralWidget(mWidget);
mWidget->setLayout(vLayout);
vLayout->addWidget(mLabel);
从上图可以看出,除了central widget
,红框外还有一些白框。我想做的是让central widget填满整个mainwindow,这样红框外就不会有白框了。也许换个说法就是做一个无边框的window(不知道无边框的window是不是我要找的)。我用谷歌搜索了如何制作无边框 window,我尝试了 setWindowFlags(Qt::FramelessWindowHint)
,但这不是我想要的。我现在很困惑如何实现这一目标?那么 How to make a borderless window
这个话题是我应该研究的吗?如果是,那是否意味着我应该调用一些 windows api 来完成这项工作?或者我应该用其他一些 Qt 方法来做?
希望有人能给我一个方法或给我一些提示。谢谢。
为什么要使用QMainWindow
?似乎人们在使用 class 时没有考虑它的用途。如果您有工具栏、状态栏或停靠子windows,您只想使用QMainWindow
。否则没有意义。您想要的是 "central widget" 成为唯一的小部件,而不是嵌入到主 window 中。如果您在 .ui
文件中设计它,则必须手动编辑它以将 class 更改为 QWidget
,并删除中间的和现在多余的 centralWidget
完全。
根据你的问题 QMainwindow 框架几何和 QLable 几何应该是 adjusted.so 你可以像下面这样使用代码行。
setGeometry(0,0,320,280);
ui->label->setGeometry(0,0,320,245);
我有一个像这样的最小示例:
mWidget = new QWidget;
vLayout = new QVBoxLayout;
mLabel = new QLabel;
mLabel->setText("Text");
mLabel->setAlignment(Qt::AlignCenter);
mLabel->setStyleSheet("QLabel { border: 2px solid red; }");
this->setCentralWidget(mWidget);
mWidget->setLayout(vLayout);
vLayout->addWidget(mLabel);
从上图可以看出,除了central widget
,红框外还有一些白框。我想做的是让central widget填满整个mainwindow,这样红框外就不会有白框了。也许换个说法就是做一个无边框的window(不知道无边框的window是不是我要找的)。我用谷歌搜索了如何制作无边框 window,我尝试了 setWindowFlags(Qt::FramelessWindowHint)
,但这不是我想要的。我现在很困惑如何实现这一目标?那么 How to make a borderless window
这个话题是我应该研究的吗?如果是,那是否意味着我应该调用一些 windows api 来完成这项工作?或者我应该用其他一些 Qt 方法来做?
希望有人能给我一个方法或给我一些提示。谢谢。
为什么要使用QMainWindow
?似乎人们在使用 class 时没有考虑它的用途。如果您有工具栏、状态栏或停靠子windows,您只想使用QMainWindow
。否则没有意义。您想要的是 "central widget" 成为唯一的小部件,而不是嵌入到主 window 中。如果您在 .ui
文件中设计它,则必须手动编辑它以将 class 更改为 QWidget
,并删除中间的和现在多余的 centralWidget
完全。
根据你的问题 QMainwindow 框架几何和 QLable 几何应该是 adjusted.so 你可以像下面这样使用代码行。
setGeometry(0,0,320,280);
ui->label->setGeometry(0,0,320,245);