一、网上很多资料说的模棱两可,故在此总结一套适配套路
原理:1、一般拿最小的分辨率来做基准配置,如480 x 320 ;
2、获取当前使用的屏幕分辨率,如1024 x 720
3、算出当前比例:scale_x = 1024/480 scale_y = 720 / 320
4、获取当前控件QWidget 坐标值,乘以对应比例。
5、Qwidget 可以获取当前子控件,一个一个适配。
二、获取当前屏幕分辨率
Application a(argc, argv);
x_width = a.desktop()->availableGeometry().width();
y_height = a.desktop()->availableGeometry().height();
三、获取QWidget 子控件
void childrenQwidget(QWidget *parent)
{
if (NULL == parent) return ;
//适配每个子空间坐标,长度宽度
do_adapt(parent);
QObjectList list = parten->children();
foreach(QObject *obj,list) {
if (obj->isWidgetType() || obj->isWindowType()) {
childrenQwidget(qobject_cast<QWidget*>(obj));
}
}
}
四、 适配每个子空间坐标,长度宽度
void do_adapt(QWidget *pwidget)
{
int x = pwidget->x();int y = pwidget->y();int w = pwidget->width();int h = pwidget->height();x = (int)(x*scale_x);y = (int)(y*scale_y);w = (int)(w*scale_x);h = (int)(h*scale_y);pwidget->setGeometry(x,y,w,h);
}五、全局变量int base_x = 480;int base_y = 320;float scale_x = 0;float scale_y = 0;void do_scale(int x,int y){if (x < 0 || y < 0) return;scale_x = ((float)x_width )/ base_x;
scale_y = ((float)y_height) / base_y;
}