在Qt里,每台电脑的分辨率不一样,比如说你的分辨率是1920*1080,那么到800*480就会有控件显示不完全,所以我们需要控件跟随变化。
我使用的方法较菜,Qt用的不熟
通过layout布局的方式对窗口的分辨率自适应,即将需要将自适应的控件添加进layout布局中,当layout的父对象的尺寸变化时,layout会根据父对象相应的变化宽、高比例对布局中的控件进行缩放,以此来实现相应控件的分辨率自适应。
但是在QtCreator Designer中添加的layout存在一个问题,如下图在Designer中添加一个Vertical Layout,layout中添加两个PushButton,当运行程序后,调整程序大小,中间的PushButton并不会随着窗口大小而进行缩放。
这是因为在resize事件中,并没有对ui->verticalLayoutWidget进行拉伸,所以我们要重写resizeEvent的函数,
void MainWindow::resizeEvent(QResizeEvent *event)
{
Q_UNUSED(event);
QWidget * resizeWidget=ui->verticalLayoutWidget;
QRect resizeRect=resizeWidget->rect();
static float baseWidth=400;
static float baseHeight=300;
static float widgetWidth=resizeRect.width();
static float widgetHeight=resizeRect.height();
static float widgetX=ui->verticalLayoutWidget->geometry().x();
static float widgetY=ui->verticalLayoutWidget->geometry().y();
float horRatio=this->rect().width()/baseWidth;
float verRatio=this->rect().height()/baseHeight;
//dajust the position of verticalLayoutWidget
resizeRect.setX(widgetX*horRatio);
resizeRect.setY(widgetY*verRatio);
//resize the verticalLayoutWidget
resizeRect.setWidth(widgetWidth*horRatio);
resizeRect.setHeight(widgetHeight*verRatio);
//set Geometry
resizeWidget->setGeometry(resizeRect);
}
利用layout对控件进行布局缩放使用简单,且无需关注内部细节,但是利用layout进行布局