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;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值