一、导读
在使用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大小需要预先评估,否则太长的字符串无法显示。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !