问题
在不同分辨率的电脑上运行同一个QT程序,有时会出现软件窗体太小或太大的问题,显然设置单一固定的窗口尺寸是不合适。虽然窗口可以设置手动拉伸缩放,但为了软件一打开就以合适的大小显示,就必须根据显示器的分辨率做调整。
方法
1.要做到自适应显示,首先UI设计时就需要对各个控件进行布局设置,即充分利用下面这些QT的布局工具,否则内部的控件大小不会随着改变。
2.在主UI类的构造函数里调用下面的函数
//remainH 窗体在高度方向上给屏幕的留余尺寸
void setAppSize(int remainH)
{
//首先获取屏幕尺寸信息
QDesktopWidget *deskTopWidget = QApplication::desktop();
QRect deskRect = deskTopWidget->availableGeometry();
//设置程序尺寸(我的界面需要适应高度)
int titleBarH = style()->pixelMetric(QStyle::PM_TitleBarHeight); // 获取标题栏高度(WIndow自带)
int appH = deskRect.height() - remainH - titleBarH;
int appW = appH*this->width() / this->height(); //根据软件的宽高比例
this->setFixedSize(appW, appH); //注意:此处设置的高度是不包含标题栏
setGeometry((deskRect.width() - appW) / 2, remainH / 2 + titleBarH, appW, appH); //设置程序窗体在桌面的显示位置
}
说明:
- 上面的函数是我精减后的,删除了centWidget里控件的尺寸设置。它对软件的Frame尺寸进行了重新的定义,其实只要已经做过布局设置,就应该可以达到你想要的效果。
- 该函数认为屏幕宽度是足够的,如果你软件的长宽比相反或者竖屏显示器,则可能要考虑长度方向,可以在此基础上优化。