- 浏览: 3446484 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
sonichy:
Qt5改动很多,要改改了。
基于QItemDelegate的例子1 SpinBoxDelegate -
我的主页6:
楼主,2.2子查询的分页方式:SELECT * FROM ar ...
Mysql 分页语句Limit用法 -
liguoqi:
非常感谢楼主的用心指导,工具以及图片例子都提供了 赞!
两款免费DCIOM 图像浏览软件介绍和DICOM图像例子供下载 -
liguoqi:
问下这个图片怎么解压损坏呀
两款免费DCIOM 图像浏览软件介绍和DICOM图像例子供下载 -
liguoqi:
楼主讲解的非常详细,还附带工具和图片例子,非常感谢
两款免费DCIOM 图像浏览软件介绍和DICOM图像例子供下载
在迄今为止讲到每一个例子中,我们只是简单的把窗口部件放置到某个确定的布局中。但在某些情况下,由此形成的布局看起来可能还不是我们最想要的形式。在这些情形中,可以通过改变要摆放的窗口部件的大小策略和大小提示来调整布局。
1.大小提示(size hint)和最小大小提示(minimum size hint)
在介绍Qt窗口部件的大小策略之前,首先介绍大小提示(size hint)和最小大小提示(minimum size hint)。
⑴ 大小提示
大小提示是Qt为一个窗口部件推荐的尺寸。当Qt GUI窗口部件进行初始化时,将通过QWidget::sizeHint()来获得窗口部件的大小提示,这是一个虚函数,它的原型为:
virtual QSize sizeHint () const
在未被重载的情况下,它的返回值是这样的:
◆ 如果该窗口部件不属于任何布局管理器,那么该函数将返回一个无效的值;
◆ 如果该窗口部件属于某个布局管理器,那么该函数将返回一个该布局管理器认为比较合适的尺寸。
⑵ 最小大小提示
最小大小提示(minimum size hint)是Qt为窗口部件推荐的最小尺寸,它的使用规则是:
如果需要绘制的窗口部件的尺寸(包括长和高两个方面)小于其最小提示(这在Qt Designer中往往表现为有些被压缩的看不到它的内容),并且该窗口部件的最小提示在最大尺寸和最小尺寸允许的范围内,那么该窗口部件显示的尺寸将是其最小提示的值。
设置窗口部件的最小大小提示是通过QWidget::minimumSizeHint()完成的。它的返回值有如下情景:
◆ 如果该窗口部件没有布局管理器,该函数返回一个无效的值;
◆ 如果该窗口部件属于某个布局管理器,该函数返回布局管理器认为合适的一个尺寸。
2.大小策略(size policy)
一个窗口部件的大小策略会告诉布局系统应该如何对它进行拉伸或收缩。Qt为它所有的内置窗口部件都提供了合理的默认大小策略值,但是由于不可能为每一种可能产生的布局都提供唯一的默认值,所以在一个窗体中,开发人员改变它上面的一个或两个窗口部件的大小策略是非常普遍的现象。一个QSizePolicy既包含一个水平分量也包含一个垂直分量。以下是一些常用的取值:
表11-1枚举值QSizePolicy::Policy的内容
枚举常量 |
值 |
说明 |
QSizePolicy::Fixed |
0 |
大小提示是该窗口部件的唯一尺寸选择,所以它不会发生任何的伸缩。 |
QSizePolicy::Minimum |
GrowFlag |
大小提示是该窗口部件的最小尺寸,它不会变得更小,但它可以变得更大,不过采用该策略的窗口部件在“争夺”空间上不占优势。 |
QSizePolicy::Maximum |
ShrinkFlag |
大小提示是该窗口部件的最大尺寸,也就是该窗口部件不会比大小提示的尺寸更大。该窗口部件可以在没有受到其它窗口部件“要求”的情况下,自由的缩小尺寸。 |
QSizePolicy::Preferred |
GrowFlag | ShrinkFlag |
一般情况下,该窗口部件会将大小提示作为它的优先和最佳选择,但它也可以变得足够的小,也可以变大,但不占优势。该策略是QWidget窗口部件默认的策略。 |
QSizePolicy::Expanding |
GrowFlag | ShrinkFlag | ExpandFlag |
采用该策略的窗口部件也能够感觉到尺寸提示,但是它倾向于尽可能的占用更大的空间,该窗口部件也可以变得足够小。 |
QSizePolicy::MinimumExpanding |
GrowFlag | ExpandFlag |
大小提示将是该窗口部件的最小尺寸,该窗口部件将尽可能的占用更多的空间。该策略已经不再被推荐使用,建议用Expanding替代它,并且重载minimumSizeHint()。 |
QSizePolicy::Ignored |
ShrinkFlag | GrowFlag | IgnoreFlag |
与Expanding有些相似,只是所有的大小提示都被忽略,该窗口部件将会尽可能的占用空间。 |
表11-1中的“值”这一列实际上告诉了我们每一种策略一般是具有“倾向性”的,比如QSizePolicy::Fixed的值为0,则它“倾向于”保持自己的大小不变,即保持大小提示的尺寸。而QSizePolicy::Expanding的值是3个值的叠加,总的“倾向性”是趋于占用更多空间的,等等。这就为当多个具有不同大小策略的窗口部件放置在一起时,如何判断它们占用空间的模式提供了基本的判断依据,以下是几种常见的组合。
◆ 相同大小策略的窗口部件被布局管理器组合在一起。在这种情况下,除了窗口部件不能超出它的大小范围外,不同的窗口部件可以按自己的伸缩因子在其允许的范围内自由的伸缩。
◆ QSizePolicy::Fixed和任何其他的大小策略组合在一起。
具有QSizePolicy::Fixed大小策略的窗口部件其大小是不变的,即保持在sizeHint()大小,而其他的窗口部件可以在允许的范围内自由伸缩。
◆ QSizePolicy::Preferred和QSizePolicy::Expanding组合在一起。
具有QSizePolicy::Preferred尺寸策略的窗口部件其大小是不变的,即它认为大小提示是最适合它的,而其他的窗口部件大小可以在其允许的范围内自由伸缩。
◆ QSizePolicy::Ignored和其他尺寸策略(QSizePolicy::Fixed策略除外)组合在一起的时候,不同的窗口部件在各自允许的范围内自由伸缩。
◆ QSizePolicy::Preferred,QSizePolicy::Minimum和QSizePolicy::Maximum组合在一起的时候,各窗口部件在各自允许的范围内可以自由伸缩。
3.伸缩因子(stretch factor)
除了大小策略中包含的水平方向和垂直方向两个分量之外,QSizePolicy类还保存了水平方向和垂直方向的一个伸缩因子。这些伸缩因子可以用来说明在增大窗体时,对不同的子窗口部件应使用的不同放大比例。即需要设置QSizePolicy::horizontalStretch和QSizePolicy::verticalStretch的值来实现。默认情况下,被布局管理器组合在一起的窗口部件的伸缩因子是相等的,都为0。此时,在所有的窗口部件都没有超出各自的大小范围允许的情况下,窗口部件的大小始终相等。
例如,假定在一个QListWidget的右面还有一个QTextEdit,并且希望这个QTextEdit的长度能够是QListWidget长度的两倍,那么就可以把这个QTextEdit在水平方向上的拉伸因子(QSizePolicy::horizontalStretch)设置为2,而把QListWidget在水平方向上的拉伸因子(QSizePolicy::horizontalStretch)设置为1;垂直方向上保持默认为0,即两者一样的高。这样设置的效果如图11-10所示。
4.大小约束(size constraint)
影响布局方式的另一种方法是设置它的子窗口部件的最大大小、最小大小或固定大小。这些是通过设置sizeConstraint属性来完成的。该属性值是一个枚举常量,定义了布局的大小约束的模式。表列出了它所有可能的取值,它的默认值是QLayout::SetDefaultConstraint。获取和设置该属性值可以通过QWidget::layout()来获取主窗口部件的布局管理器,然后可以调用QLayout::sizeConstraint()函数来查看当前的设置情况,然后再通过QLayout::setSizeConstraint()函数来设置该布局管理器的sizeConstraint属性。这两种函数的原型如下:
SizeConstraint sizeConstraint () const
void setSizeConstraint ( SizeConstraint )
其中,SizeConstraint的取值即是在表11-2中的枚举值的范围内。
表11-2 布局管理器的大小约束属性(QLayout::SizeConstraint)可能的取值
枚举常量 |
值 |
说明 |
QSizePolicy::Fixed |
0 |
大小提示是该窗口部件的唯一尺寸选择,所以它不会发生任何的伸缩。 |
QSizePolicy::Minimum |
GrowFlag |
大小提示是该窗口部件的最小尺寸,它不会变得更小,但它可以变得更大,不过采用该策略的窗口部件在“争夺”空间上不占优势。 |
QSizePolicy::Maximum |
ShrinkFlag |
大小提示是该窗口部件的最大尺寸,也就是该窗口部件不会比大小提示的尺寸更大。该窗口部件可以在没有受到其它窗口部件“要求”的情况下,自由的缩小尺寸。 |
QSizePolicy::Preferred |
GrowFlag | ShrinkFlag |
一般情况下,该窗口部件会将大小提示作为它的优先和最佳选择,但它也可以变得足够的小,也可以变大,但不占优势。该策略是QWidget窗口部件默认的策略。 |
QSizePolicy::Expanding |
GrowFlag | ShrinkFlag | ExpandFlag |
采用该策略的窗口部件也能够感觉到尺寸提示,但是它倾向于尽可能的占用更大的空间,该窗口部件也可以变得足够小。 |
QSizePolicy::MinimumExpanding |
GrowFlag | ExpandFlag |
大小提示将是该窗口部件的最小尺寸,该窗口部件将尽可能的占用更多的空间。该策略已经不再被推荐使用,建议用Expanding替代它,并且重载minimumSizeHint()。 |
QSizePolicy::Ignored |
ShrinkFlag | GrowFlag | IgnoreFlag |
与Expanding有些相似,只是所有的大小提示都被忽略,该窗口部件将会尽可能的占用空间。 |
5.空白(margin)和间距(spacing)
每种布局都有两个重要的属性,空白和间距。空白指的是整个布局四周距离窗体边缘的距离;间距指的是布局管理器内部各个窗口部件之间的距离。
空白属性即margin(),间距属性即spacing(),它们的默认值是有窗体的风格决定的。Qt的默认风格下,子窗体部件的margin()的值是9英寸,窗体的margin()值是11英寸。spacing()的值与margin()相同。
如果要设置这两个值可以通过setMargin()和setSpacing()。
注意,从Qt4.3开始,margin()属性已经逐渐不再被Qt4所推荐,更好的设置空白的方法是使用setContentsMargins()方法,它的原型如下:
void QLayout::setContentsMargins ( int left, int top, int right, int bottom )
其中,left, top, right, 和 bottom表示环绕在布局周围的空白。
对于QGridLayout 和QFormLayout,不要使用setSpacing()方法,而是要分别使用setHorizontalSpacing()和setVerticalSpacing()方法来设置水平和垂直方向的间距。如果你使用了setSpacing()方法,获取spacing()时,它的返回值将为-1。
http://blog.csdn.net/qter_wd007/article/details/5377882 作者 qter_wd007
发表评论
-
Qt官网变更【2012】
2012-09-21 19:30 4215Qt最近被Digia完全收购,诺基亚这两年的不理不睬,没有魄力 ... -
【转】QT实现不规则窗体
2012-09-21 18:50 4994看到好文章,收藏一下: 看到网上有很多不规则窗体的实现 ... -
Qt应用程序如何使用DCMTK类库进行二次开发DICOM数据传输
2012-09-13 09:35 0参考文章: 1、Using DCMTK with ... -
【转】将QT开发的界面程序封装成DLL,在VC中成功调用
2012-09-11 10:33 21122最近手头的一个项目需要做一个QT界面,并且封装成DLL,然后 ... -
诺基亚挥别Qt,转手给Digia
2012-09-11 09:37 2861一家总部位于芬兰的IT业务供应商Digia今天宣布,已经签署了 ... -
Qt多线程间信号槽传递非QObject类型对象的参数
2012-09-07 15:29 21383一、以前就发现过这个问题: 在Qt项目中,有时候为了 ... -
QT样式表(QStyleSheet)
2012-08-17 10:37 17895QT样式表 (QStyleSheet) 作者:刘旭晖 ... -
FinalData磁盘文件恢复工具(绿色破解版)
2012-08-02 13:28 8591FinalData磁盘文件恢复工具(绿色破解版),使用起来很方 ... -
Eclipse Qt开发环境的建立【转】
2012-08-01 11:15 43831.下载Eclipse目前Eclipse+CDT已经可以 ... -
汽车辐射监测系统-Qt开发
2012-07-25 16:18 4694最近晚上抽空忙了两个月,才把一个小系统做完。虽然做的不是太完 ... -
Qt做发布版,解决声音和图片、中文字体乱码问题
2012-07-14 16:02 4866Qt做发布版,解决声音和图片、中文字体乱码问题 ... -
QTableView使用中的疑问,如何及时显示操作Model后的结果?
2012-06-01 14:52 0最终的解决方法:我正 ... -
【转】Qt QTableview使用
2012-06-01 09:49 9677QTableWidget是QT程序中常用的显示数 ... -
QTableView双击 单机事件信号
2012-06-01 09:47 23106双击QTableView的行,获取该行数据 代码 ... -
QMessageBox改变大小
2012-05-31 15:33 8451创建一个QMessageBox: QMessageBo ... -
更新QTableView中的进度条状态
2012-05-30 14:37 14868前段时间,我接触了,如何在一个QTableView中加入一个控 ... -
QThread 线程暂停 停止功能的实现
2012-05-29 11:56 12207为了实现Qt中线程的暂停运行,和停止运行的控制功能 需要在设 ... -
QT环境变量
2012-05-28 18:53 5594不知道为啥同事有台电脑,装完Qt-VS2008库,和VS Ad ... -
广告光
2012-05-24 18:33 0盈创广告联盟 http://www.yo114.cn/ ... -
Test
2012-05-24 18:22 2191Test<IMG SRC="cf08e32c2 ...
相关推荐
本主题将深入探讨Qt中的高级停靠系统,该系统是Qt库中的一个关键特性,尤其在构建具有复杂界面布局的应用程序时显得尤为重要。 一、Qt框架简介 Qt由Trolltech公司(现为The Qt Company)开发,使用C++语言编写,并...
"QT qt-opensource-linux-x64-5.7.1.zip"是一个方便在Ubuntu上安装QT 5.7.1的开源软件包,通过简单的几步操作,开发者可以在Linux环境中搭建起强大的QT开发环境,利用其丰富的功能和跨平台特性开发出各种类型的应用...
总结起来,"qtcreator-gdb-7.4-MINGW32_NT-6.1-i686"是QT开发者在Windows环境下调试QT4.8.5程序的强大工具,结合QT Creator的可视化界面和GDB的调试功能,可以高效地定位和解决代码中的问题,提升开发效率。
而QT-vs-addin-1.1.11则确保了在VS2010中的开发体验与在原生QT环境中几乎无异,这对于团队协作和项目管理尤为重要。 总的来说,这个压缩包提供了一套完整的解决方案,使得开发者能够在Visual Studio 2010中无缝地...
QT-vs-addin-1.2.4-opensource是针对Visual Studio(VS)的插件,其主要目的是将Microsoft Visual Studio集成开发环境(IDE)与QT库相结合,为开发者提供一个便捷的工具,以便在Windows平台上使用VS进行QT应用程序的...
总的来说,"qt-opensource-windows-x86-msvc2010-5.5.1"与"qt-vs-addin-1.2.5"结合使用,为Windows平台上的QT开发提供了一套全面的解决方案,让开发者能够在熟悉的Visual Studio环境中高效地开发出高质量的跨平台...
在给定的压缩包文件中,我们有两个关键组件:qt-vs-addin-1.2.5和qt-creator-5.0.3。 首先,qt-vs-addin-1.2.5是Visual Studio的一个插件,它允许开发者在Microsoft Visual Studio 2010环境中直接进行QT项目的开发...
《Qt4图形设计与嵌入式开发--源代码》是一个集合了多个Qt开发实例的资源包,对于想要深入了解和学习Qt框架,特别是涉及到嵌入式系统开发的开发者来说,这是一个非常有价值的参考资料。Qt是一个跨平台的C++图形用户...
《Visual Studio 2017中的Qt插件:qt-vsaddin-msvc2017-2.8.1-rev.06》 在软件开发领域,集成开发环境(IDE)如Microsoft的Visual Studio 2017为程序员提供了丰富的功能和便利。然而,对于使用Qt框架的开发者来说,...
在布局方面,Qt-Advanced-Docking-System允许你创建复杂的停靠布局,包括水平和垂直堆叠、网格布局,甚至可以创建多层嵌套的停靠区域。通过`DockLayout`类,你可以精确控制各个DockWidget的位置和尺寸。 对于...
在软件开发领域,Qt是一个广泛使用的跨平台应用程序框架,它提供了丰富的库、工具和开发环境,支持C++语言,同时也提供了QML进行UI设计。本次我们将深入探讨的是“qttools-everywhere-src-5.15.0”这个压缩包,它...
在该压缩包中,"qt-opensource-windows-x86-5.14.2"很可能包含以下组件: 1. **安装程序**: 一个可执行文件,用于在Windows系统上安装Qt开发环境,包括编译器、Qt库、开发工具和示例代码等。 2. **Qt库**: 包含所有...
首先,QT 5.14.2版本在性能上进行了优化,使得应用程序运行更加流畅,内存占用更低。这包括了对图形渲染和事件处理的提升,以及对多线程和并发编程的支持增强。对于开发者来说,这意味着能够创建更高效的应用程序,...
qt-vs-addin-1.2.4-opensourceQt,坦白来说,并不只是一个界面库,他是C++编程思想的集大成者。它是得到完善的C++应用程序框架。使用Qt,在一定程度上你获得的是一个“一站式”、“全方位”的解决方案,STL。string...
通过qt-win-opensource-4.8.5-vs2010.exe安装包,开发者可以将Qt框架集成到Visual Studio 2010中,这意味着他们可以利用VS的全部功能来开发Qt应用程序,而无需离开熟悉的开发环境。 集成过程通常涉及以下步骤: 1. ...
《C++ GUI Qt 4 编程(第二版)》《C++ GUI programming with Qt4》高清-中文版-扫描版-PDF 分辨率在500dpi左右,清晰度,绝对高清有保证! 书签-封面-所有信息齐全。 绝对原版扫描,一页不漏! 由于文件大(清晰度...
4. 配置环境变量:安装完成后,需要配置环境变量,以便在命令行或 IDE 中使用 Qt 5.12.1。 Qt 5.12.1 的应用场景 Qt 5.12.1 广泛应用于多种领域,包括: 1. 桌面应用程序开发:Qt 5.12.1 提供了强大的桌面应用...
"qt-everywhere-opensource-src-5.7.1.tar.gz" 是一个包含Qt开源源码的压缩包,适用于版本5.7.1。Qt是一个强大的跨平台应用程序开发框架,支持Windows、Linux、macOS、Android以及iOS等多个操作系统。这个压缩包主要...
qt-opensource-windows-x86-5.13.2.exe
qt-opensource-windows-x86-msvc2015_64-5.8.0:vs2015版本的qt,解决官网下载不了的问题,已存在百度网盘