学Qt,“大小限定”背后的思路和“坑”

描述

一、导读

在使用Qt开发界面的时候,大小限定是常使用的操作。在界面元素的鼻祖QWidget中提供了一系列的方法,用于设定指定元素的大小或者最小/最大的大小:

 

 //设置最大高度
void setMaximumHeight(int maxh) 

//设置最大大小
void setMaximumSize(const QSize &)
    
//设置最大大小(包含最大宽度、最大高度)    
void setMaximumSize(int maxw, int maxh)
    
//设置最大宽度    
void setMaximumWidth(int maxw)
    
//设置最小高度    
void setMinimumHeight(int minh)
    
//设置最小大小    
void setMinimumSize(const QSize &)
    
//设置最小大小(包含最小宽度、最小高度)
void setMinimumSize(int minw, int minh)
    
//设置最小宽度
void setMinimumWidth(int minw)
    
//设置固定高度
void setFixedHeight(int h)
    
//设置固定宽度
void setFixedWidth(int w)
    
//设置固定大小    
void setFixedSize(const QSize &s)
    
//设置固定大小(包含固定宽度和高度)
void setFixedSize(int w, int h)

 

上述的成员函数,功能与名称描述一致。

在不同显示屏大小的平台下,或者需要开发自适应大小的应用窗体时,大小限定是必备的操作。

二、大小限定背后的设计思路

如果应用程序的界面窗体大小在实际开发中大小是不变的,就需要使用setFixedxxx函数将窗体设置为固定的大小,不然,在鼠标拖动的情况下,且窗体中的各界面控件没有设计自适应,则会出现窗体填充不满或者多控件之间彼此覆盖的情况,例如如果使用《Qt这四种设置窗体背景的方法,都知道吗?》一文中所述的QPalette方法设置了背景图:

 

Widget::Widget(QWidget *parent)
    : QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    QPalette palette = this->palette();
    palette.setBrush(QPalette::Window,QBrush(QPixmap(":/images/bk.png")));
    this->setPalette(palette);
}

 

这时候拖动鼠标,则会出现下图所示效果:代码

如果使用QLabel方法设置背景图:

 

ui->label->setPixmap(QPixmap(":/images/bk.png"));

 

则会出现下图所示效果:

代码

综上,开发不需要自适应的窗体界面时,为了不影响应用软件的界面窗体中呈现内容的效果,设置窗体的大小是必要的。

如何设置窗体或者窗体中的界面控件的大小呢?有两种方法:

(1)在代码中使用大小限定函数进行设置。

(2)在Qt Designer中选中需要设置的界面控件对象,右键单击,在弹出的对话框中选择“大小限定”下的选项。

代码

自适应的窗体开发,需要使用Qt提供的布局器(QBoxLayout、QFormLayout、QGridLayout和QStackedLayout)来完成,在代码中可以直接进行布局描述。当然,使用Qt Designer能够进行自适应窗体的快速开发,特别是垂直Spacer和水平Spacer这两个辅助控件在自适应窗体开发中特别好用。

三、小生总结

(1)在开发自适应的应用窗体时,在使用布局器进行布局后,如果窗体大小发生改变,可能窗体中的子控件大小会受到影响(发生大小变换),这时候限定子控件的大小是必须的。

(2)在布局的时候,合理设置Spacer的sizeType属性,往往可以达到我们想要的布局效果。

代码

(3)在使用QLabel显示文本的时候,QLabel大小需要预先评估,否则太长的字符串无法显示。

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分