QT GUI 屏幕自适应

来源:互联网 发布:淘宝原单店铺推荐2016 编辑:程序博客网 时间:2024/06/16 18:49

一、网上很多资料说的模棱两可,故在此总结一套适配套路

原理: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;
}