QT GUI 屏幕自适应

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

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

你可能感兴趣的:(QT)