如何使用 qt designer 自动集中小部件?
How to centralize widget automatically with qt designer?
我正在全屏创建应用程序,但是在 qt design 中编辑时没有这样的选项。因此,当我将小部件置于 qt 设计器中心时,它看起来像这样:
它看起来像居中,但它居中为标准 window 尺寸:
现在看看当我增加 window 的大小时会发生什么:
你快到了。
如果您添加 2 个垂直分隔符,将它们和您的水平布局放入垂直布局,最后将 mainwindow 上的所有内容放入网格布局,您将实现您正在寻找的东西。看起来像这样:
这样,无论 window 的大小如何,小部件都可以放置在 window 的正中央。只需确保 spacer 的 sizeType 属性 设置为 Expanding。
或者,您可以通过覆盖 QMainWindow::resizeEvent
来实现相同的功能。像这样:
//In your .h file
protected:
void resizeEvent(QResizeEvent *event) override;
//In your .cpp file
void MainWindow::resizeEvent(QResizeEvent *event)
{
ui->pushButton->setGeometry(this->width()/2 - ui->pushButton->width()/2,
this->height()/2 - ui->pushButton->height()/2,
ui->pushButton->width(),
ui->pushButton->height());
}
它需要更多的编码,但允许更多的灵活性。
我正在全屏创建应用程序,但是在 qt design 中编辑时没有这样的选项。因此,当我将小部件置于 qt 设计器中心时,它看起来像这样:
它看起来像居中,但它居中为标准 window 尺寸:
现在看看当我增加 window 的大小时会发生什么:
你快到了。
如果您添加 2 个垂直分隔符,将它们和您的水平布局放入垂直布局,最后将 mainwindow 上的所有内容放入网格布局,您将实现您正在寻找的东西。看起来像这样:
这样,无论 window 的大小如何,小部件都可以放置在 window 的正中央。只需确保 spacer 的 sizeType 属性 设置为 Expanding。
或者,您可以通过覆盖 QMainWindow::resizeEvent
来实现相同的功能。像这样:
//In your .h file
protected:
void resizeEvent(QResizeEvent *event) override;
//In your .cpp file
void MainWindow::resizeEvent(QResizeEvent *event)
{
ui->pushButton->setGeometry(this->width()/2 - ui->pushButton->width()/2,
this->height()/2 - ui->pushButton->height()/2,
ui->pushButton->width(),
ui->pushButton->height());
}
它需要更多的编码,但允许更多的灵活性。