Qt Creator 窗体控件自适应窗口大小布局
- 格式:doc
- 大小:321.50 KB
- 文档页数:5
如何实现控件随对话框大小变化而自动调整大小和位置VC++ 2009-12-28 20:27:42 阅读461 评论0字号:大中小订阅1. 处理对话框的WM_SIZE,然后用MoveWindow或者SetWindowPos来把对话框上面的控件重新调整新位置和大小。
2. 基本的做法就是响应WM_SIZE消息,并按照窗口大小比例来调整控件的位置和大小,控件的大小最好设置成窗口的百分之几,这样的话,就可以根据窗口的大小随时调整了。
3. 每次OnSize 即可获得一个CRect,然后根据这个CRect来确定这些控件的位置和大小,使用函数MoveWindow 或SetWindowpos实现。
4.1)通过下面两个函数获取的是显示屏幕的大小【屏幕的分辨率】(不包括任务栏等区域):int nFullWidth=GetSystemMetrics( SM_CXFULLSCREEN ); //屏幕宽度int nFullHeight=GetSystemMetrics( SM_CYFULLSCREEN ); //屏幕高度2)这两个函数获取的是真正屏幕的大小【屏幕的分辨率】(包括任务栏等区域):int cx = GetSystemMetrics( SM_CXSCREEN );int cy = GetSystemMetrics( SM_CYSCREEN );如:用前两个函数获取的大小可能是1024*687 ,而用下边两个获取的就是1024*768。
5. 在OnSize() 中调用:GetClientRect() 和GetWindowRect() 函数可获取窗口大小,但需注意得到的是设备坐标,如果需要画图什么的还需要转换成逻辑坐标。
6. 字体大小随窗口变化而自动变化,比如说始终使字的高度始终占窗口的1/3。
使用:1). 在Creat中将nHeight设成窗口长度或者宽度的一定比值就行了(最好在onsize函数中设置);2). 使用WM_FONTCHANGE 消息。
qt实现不规则窗口的方法一、前言Qt是一个强大的跨平台开发框架,它提供了丰富的API和工具,使得开发者能够轻松地创建各种类型的应用程序。
在Qt中,窗口是应用程序的重要组成部分,而不规则窗口的实现则可以让应用程序更加具有个性化和视觉吸引力。
本文将介绍如何使用Qt实现不规则窗口的方法。
二、不规则窗口的实现方法1. 使用自定义窗口类在Qt中,可以通过继承QMainWindow或QDialog类,并重写其中的一些方法来实现不规则窗口。
首先,需要定义一个自定义窗口类,并在其中重写windowRect()和sizeHint()方法,以获取窗口的尺寸和形状。
然后,可以使用setWindowFlags()方法来设置窗口的样式,以实现不规则窗口的效果。
2. 使用布局管理器Qt提供了多种布局管理器,如QHBoxLayout、QVBoxLayout、QGridLayout等,这些布局管理器可以根据需要自动调整窗口的大小和位置。
通过使用布局管理器,可以将不规则形状的窗口部件放置在窗口中,并自动调整窗口的大小和位置,以达到不规则窗口的效果。
3. 使用形状控件Qt提供了一些形状控件,如QFrame、QPushButton等,这些控件可以设置不同的形状,如矩形、圆形、椭圆形等。
通过将这些形状控件放置在窗口中,并使用布局管理器自动调整它们的位置和大小,可以实现不规则窗口的效果。
三、示例代码下面是一个简单的示例代码,展示了如何使用自定义窗口类和布局管理器实现不规则窗口:```cpp#include <QApplication>#include <QMainWindow>#include <QVBoxLayout>#include <QWidget>class IrregularWindow : public QWidget {public:IrregularWindow(QWidget *parent = nullptr) : QWidget(parent) {}void setShape(QRect rect) {m_shape = rect;update();}protected:void paintEvent(QPaintEvent *event) override {QPainter painter(this);painter.drawRect(m_shape);}private:QRect m_shape;};int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget *centralWidget = new QWidget;QVBoxLayout *layout = new QVBoxLayout(centralWidget);QWidget *widget1 = new IrregularWindow;widget1->setWindowFlags(widget1->windowFlags() | Qt::FramelessWindowHint);widget1->setShape(QRect(50, 50, 200, 100));layout->addWidget(widget1);QWidget *widget2 = new QPushButton("Button");layout->addWidget(widget2);QWidget *widget3 = new QFrame(centralWidget);widget3->setFrameShape(QFrame::Rectangle);layout->addWidget(widget3);centralWidget->show();return app.exec();}```在上面的代码中,我们创建了一个自定义窗口类IrregularWindow,它继承自QWidget,并重写了paintEvent()方法来绘制自定义的形状。
如何获得Qt窗⼝部件在主窗⼝中的位置⽤Qt Creator 设计程序时,最⽅便的就是ui设计器,可以很容易的得到想要的布局。
但是这样⾃动布局带来的后果是很难知道窗⼝中某⼀部件在主窗⼝中的相对位置。
在处理⼦窗⼝⿏标事件时变的很⿇烦。
主窗⼝有菜单、⼯具条等,想⽤⿏标绘图,
把⿏标轨迹映射到窗⼝部件上,这些问题。
其实最主要的是获得窗⼝部件的起始点相对主窗⼝的位置。
例如:在主窗⼝拖⼊⼀个QScrollArea 在其上放⼀个QLabel⽤来显⽰⿏标事件。
可以在ui对象结构上看到如下结构。
⼤家知道,我们可以⽤pos()来获得某⼀窗⼝部件的起始点相对其⽗的位置。
那么,看结构可知,要获得scrollArea_2在主窗⼝(MainWindow)中的相对位置
即为:ui->scrollArea_2->pos()+ui->centralWidget->pos()
所以想获得窗⼝ScrollArea_2在主窗⼝中的相对位置区域为:
labelrect = QRect(ui->scrollArea_2->pos()+ui->centralWidget->pos(),
ui->scrollArea_2->size());
那么判断⿏标是否在此控件上只需在⿏标事件响应函数内写如下语句即可:
if(labelrect.contains(event->pos())) {……}
现在你可以在任意复杂的ui结构中确定某⼀⼦部件的位置了,但⼀定要注意:
⽗关系,即当前部件于其⽗部件的相对位置,其⽗部件与上层部件的相对位置,
直到与主窗⼝的相对位置。
qtcreator命令参数Qt Creator是一款功能强大的集成开发环境(IDE),广泛用于开发Qt应用程序。
Qt Creator提供了丰富的功能和工具,以帮助开发者更高效地编写、调试和测试代码。
本文将介绍一些常用的Qt Creator命令参数,帮助开发者更好地利用这款工具。
1. -noload <插件名>该命令参数用于加载Qt Creator时禁用指定的插件。
可以根据需要灵活选择需要加载的插件,提高工作效率。
例如,使用-noload QmlDesigner参数可以禁用QML设计器插件,适用于不需要使用该功能的开发者。
2. -load <插件名>与-noload参数相反,该命令参数用于加载Qt Creator时强制启用指定的插件。
这对于需要使用某些特定插件的开发者非常有用。
例如,使用-load QmlDesigner参数可以强制启用QML设计器插件,以便进行QML界面的设计与调试。
3. -project <项目文件名>使用该命令参数可以直接打开指定的Qt项目文件。
这样可以快速地在Qt Creator中打开项目并开始开发。
例如,使用-project MyProject.pro参数可以直接打开名为MyProject.pro的项目文件。
4. -client <IP地址:端口号>该命令参数用于指定调试客户端的连接地址和端口号。
这对于远程调试非常有用。
例如,使用-client 192.168.1.100:1234参数可以将调试会话连接到IP地址为192.168.1.100、端口号为1234的客户端。
5. -debug <调试器插件名>使用该命令参数可以指定调试器插件的名称,用于调试应用程序。
这对于需要使用特定调试器的开发者非常有用。
例如,使用-debug Gdb参数可以指定使用Gdb调试器插件进行调试。
6. -no-plugins该命令参数用于在启动时禁用所有插件。
widget跟随窗口调整
UI界面控件随窗口自适应变化大小
通过Qt Creator的设计模式实现,无需增加代码。
如下图,实现对最下层tableview大小跟随窗口调整:
1、界面空白处右击,选择布局-->栅格布局,这会使centralWidget布局设置为GridLayout。
然后界面中的部件会自动添加到栅格布局中,此时的部件会根据窗口大小自动调整大小。
2、但是部件的大小却不是我们希望的,极不协调,接下来就需要调整每个控件的设置。
调整控件Size的项目包括:sizePolicy、minimumSize、maxmumSize
比如将上面的第三行的lineEdit限制高度:
这样,在调整窗口大小的时候,lineEdit控件只能任意改变宽度,而高度则被限制在30个像素内。
(调整之后效果)
注意:
有些情况下设置了上面的操作步骤之后,但似乎没有起作用。
比如上面例子中第一行的几个空间,虽然设置了sizePolicy以及宽度、高度限制,但是还是随着界面改变。
这个时候,就需要添加 Spacer(看起来像弹簧的控件),之后就能解决问题了。
这是因为GridLayout布局的影响,他必须让布局之内的区域布满控件,而不能有空白,所以即使设置了大小限制,仍然会被拉伸。
添加Spacer就是为了填充多余的区域。
Qt的5种常⽤布局搭建Qt布局详解:界⾯开发⾸先要对整个界⾯进⾏布局,使窗体上的所有的控件必须有⼀个合适的尺⼨和位置。
那么做出来的界⾯才看起来美观。
那么如何对界⾯进⾏布局呢?Qt提供了⼀些类负责排列窗体上的控件,主要有:QHBoxLayout,QVBoxLayout,QGridLayout,QFormLayout,QStackLayout。
(布局管理类)这些类简单易⽤,⽆论在代码中还是⽤Qt Designer开发程序都能⽤到。
常⽤的布局⽅法:(1)使⽤⽔平布局类QHBoxLayout;(2)使⽤垂直布局类QVBoxLayout;(3)使⽤⽹格布局类QGridLayout;(4)使⽤表格布局类QFormLayout;(5)使⽤分组布局类QStackLayout( QStackedLayout类把⼦控件进⾏分组或者分页,⼀次只显⽰⼀组或者⼀页,隐藏其他组或者页上的控件)。
这些⽅法可以嵌套使⽤。
使⽤这些Qt布局管理类的另⼀个原因是,在程序、系统改变字体,语⾔或者在不同的平台上运⾏时,布局管理器能够⾃动调整窗体⾥所有控件的⼤⼩和尺⼨。
布局管理的三种⽅式:Qt中有三种⽅式对窗体上的控件进⾏布局管理:1.绝对位置定位(absolute positioning):控件布局是固定位置,没有⾃适应功能。
例⼦如下:QWidget *pWidget = new QWidget;QLabel label(pWidget);label.setText(QObject::tr("姓名:"));label.setGeometry(10,10,20,20);QLineEdit namedLineEdit("⼩王",pWidget);namedLineEdit.setGeometry(35,10,50,20);QPushButton *btn = new QPushButton(QObject::tr("关闭"),pWidget);btn->setGeometry(90,10,40,20);2.⼿⼯布局(manual layout):给出控件的绝对位置,但是他们的尺⼨根据窗⼝的⼤⼩确定,可以通过重写窗体控件的resizeEvent()实现对⼦控件的⼤⼩设置。
【Qt】QtCreator介绍简介Qt Creator是使⽤Qt开发的IDE。
Qt⽀持Windows、Linux/Unix、Mac OS X、Android、BlackBerry、QNX等多种平台,Qt Creator为不同平台提供了统⼀的开发环境。
Qt Creator集成了Qt Designer、Qt Assistant、Help等⼯具。
因此,在开发过程中可以很快的通过Designer来设计界⾯。
如果想从Qt API中获得更详细的信息,只需要将光标定位到相应的类或函数并按下F1即可。
简介欢迎模式⼯程⽰例教程编辑模式编写代码查找重构配置编辑器字体和颜⾊⾏为设计模式调试模式调试C程序帮助模式使⽤帮助模式查看功能提⽰在⽂档中查找信息添加书签到帮助页欢迎模式进⼊Qt Creator后,会默认进⼊欢迎模式,默认选择的是”Project”选项。
当然,通过它我们可以很容易对⼯程进⾏操作。
⼯程New Project:新建⼯程。
可以使Qt⼯程、Creator插件、C++库、其他项⽬。
Open Project:打开⼯程Seeeions:会话。
可以对会话进⾏管理,包括Clone。
如果没打开⼯程,则显⽰的是最后⼀次打开的(会话)⼯程,否则,显⽰当前的会话(⼯程)。
Recent Projects:列出最近打开的项⽬,通过它可以迅速打开指定项⽬。
New to Qt:可以帮助你学习开发Qt项⽬和浏览Qt Creator。
Qt Account:Qt账户Qt Cloud Services:Qt云服务Online Community:⽹络社区Blogs:博客User Guide:⽤户⼿册⽰例列出了所有的Qt Examples(Qt Widgets、QML相关的),选择任意⼀个你想到学习的⽰例打开,然后编译、运⾏。
建议⼤家⼀定要把”⽰例”⽤好,这绝对是熟悉Qt的⼀条捷径,⾥⾯有成为⾼⼿的必杀技。
教程⾥⾯包含⼤量的Qt讲解视频及⽂档。
qtcreator实战教程Qt Creator是一款功能强大的集成开发环境,特别适用于Qt框架的开发。
下面是一个关于Qt Creator的实战教程。
第一步,安装Qt Creator:第二步,创建新项目:打开Qt Creator后,点击“新建项目”。
在弹出的对话框中,选择“Qt Widgets应用程序”模板,并点击“下一步”。
然后,输入项目的名称和位置。
接下来,选择编译套件和目标设备。
最后,点击“完成”按钮。
第三步,设计界面:在Qt Creator的设计器视图中,我们可以通过拖拽和调整控件来设计界面。
用户可以选择各种控件,例如按钮、文本框和列表框,然后将其放置在主窗口中。
用户还可以设置控件的属性,例如大小、位置和样式。
第四步,编写代码:第五步,编译和运行:在Qt Creator的菜单栏中,选择“构建”->“构建项目”来编译项目。
如果没有错误,编译过程将会成功完成。
然后,用户可以点击“运行”按钮来运行程序。
第六步,调试程序:在Qt Creator中,用户可以使用内置的调试器来调试程序。
用户可以在代码中设置断点,然后在运行时逐步执行代码。
用户还可以查看变量的值、跟踪函数的调用链以及定位异常等。
第七步,部署应用程序:在Qt Creator中,用户可以使用“构建套件助手”来构建和部署应用程序。
用户可以选择不同的平台和构建配置,然后点击“构建”按钮来构建应用程序。
构建过程将会生成可执行文件以及所需的库和资源文件。
第八步,界面国际化:总结:Qt Creator是一个非常强大的集成开发环境,可以帮助开发者快速构建Qt应用程序。
通过本教程,您可以学会如何安装Qt Creator、创建新项目、设计界面、编写代码、编译和运行、调试程序、部署应用程序以及实现界面国际化。
希望这个实战教程对您有所帮助!。
qt控件认知之布局控件1、QFormLayout:表单布局,顾名思义就是实现表单模式的布局。
表单就是提⽰⽤户进⾏交互的⼀种模式,其主要有两个列组成,第⼀个列⽤于显⽰信息,给予⽤提提⽰,⼀般叫做label域,第⼆个是需要⽤户选择输⼊的,⼀般叫field域。
表单就是很多由这两项/两列内容组成的⾏的布局。
label与field关系就是label是关联field的。
表单布局完全可以使⽤表格布局实现,是⼀种多⾏两列的列表,但表单布局提供⼀种⽐较完善的策略,其主要有以下优点1)可以适应不同平台外观和感觉的⼀致性2)⽀持⼀⾏的label和field域换⾏显⽰,有两种策略⼀种是如果输⼊域过长,field换⾏显⽰,还有⼀种就是不管怎么样都换⾏显⽰,当然默认是⼀⾏显⽰两个域就可以了3)创造label--field对很便捷的接⼝,因为使⽤⼀般的布局,想要关联label和field,创建好label和feild,并且调⽤label的setBuddy才能完成,但formlayout使⽤addRow就可以直接对应了。
表单布局的样式可以通过⼏个⽅⾯体现1)label的样式,是左对齐还是右对齐,可以使⽤setLabelAlignment进⾏设置2)form的样式,其内容的显⽰⽅式,则可以通过setFormAlignment进⾏设置3)表单⼀⾏内容的显⽰,是否换⾏,则使⽤setRowWrapPolicy设置,主要值是DontWrapRows,即Field域永远跟着其label;WrapLongRows,给予label⾜够的空间,剩余的空间给field域,如果field域的最⼩空间⽐剩余的控件⼤/宽,则field会换⾏到下⼀⾏显⽰;WrapAllRows,所有的field域不管后⾯剩余的空间是否够,都⾃动换⾏。
4)filed域拉升⽣长策略growth policy,其主要是FieldGrowthPolicy控制,⾸先是FieldStayAtSizeHint 0 ,field域永远不会超过有效的sizehint尺⼨;ExpandingFieldGrow 1,field 域⽔平尺⼨拉升或者最⼩值超出时会占⽤可⽤空间,其他field在sizehint尺⼨下不会扩⼤grow;AllNonFixedFieldGrow 2所有的field允许他们长grow就长grow到填充可⽤的空间,如果是fixed 固定尺⼨策略的field则不会长表单由两列组成,所以⼀本都是分为label和field域,但是有些控件占⽤两⾏,所以对每个⾏其可以通过⾓⾊来访问,如LabelRole 0,⼀个label控件,FieldRole 1,⼀个field空间,SpanningRole就是占⽤了label和field两列的控件。
Qt Creator 窗体控件自适应窗口大小布局
常见的软件窗口大小改变(最大化、手动改变时)需要窗口的部件能够自适应布局,而在Qt的应用程序界面设计中,对于像我一样的初学者如何实现窗口自适应调整还是要绕点弯路的。
网上百度了很多,多数说的很含糊,还有很多是用程序实现的,既然已经有Qt Creator那么高集成度的工具了,我还是倾向于直接在Qt Creator中通过可视化配置的方式完成,一是所见即所得,而是效率要高不少。
Qt中如果想实现窗体内空间随着窗体大小调整,必须使用布局管理,常用的布局管理有QHBoxLayout、QVBoxLayout、QGridLayout,空的地方使用spacer 控件进行填充,因此首先将窗体空间使用布局管理典型应用如下图所示。
我这里使用QGridLayout,按住Ctrl多选需要布局的窗体控件,右键-布局-栅格化局,根据需要进行调整。
要想是控件根据窗体进行调整,最为重要的一点就是设置窗口部件的大小策略,各控件均有这一项设置,如下图所示。
这部分具体的参数解释摘录如下:
结合控件的SizePolicy属性,来控制布局管理中的控件的尺寸自适应方式。
控件的sizePolicy说明控件在布局管理中的缩放方式。
Qt提供的控件都有一个合理的缺省sizePolicy,但是这个缺省值有时不能适合所有的布局,开发人员经常需要改变窗体上的某些控件的sizePolicy。
一个QSizePolicy的所有变量对水平方向和垂直方向都适用。
下面列举了一些最长用的值:
A. Fixed:控件不能放大或者缩小,控件的大小就是它的sizeHint。
B. Minimum:控件的sizeHint为控件的最小尺寸。
控件不能小于这个sizeHint,但是可以
放大。
C. Maximum:控件的sizeHint为控件的最大尺寸,控件不能放大,但是可以缩小到它的最小
的允许尺寸。
D. Preferred:控件的sizeHint是它的sizeHint,但是可以放大或者缩小
E. Expandint:控件可以自行增大或者缩小
注:sizeHint(布局管理中的控件默认尺寸,如果控件不在布局管理中就为无效的值)
所以对于需要根据窗口大小对应改变的部件我这里就设置为Expandint。
在部件大小策略的下方还有伸缩因子的设置,用于设置窗口部件在伸缩过程中的对应比例,这部分可以自行摸索。
要想实现随着窗口自动缩放,很重要的一点是需要设置顶级布局,对于一个窗口来说,只能有一个布局成为它的顶级布局,而刚刚的设置还只是控件之间的布局,因此需要放入窗体布局中进行布局。
在没有控件的地方右击-布局-在状体布局中布局,如下图所示:
接下来把需要布局的布局拖放到窗体布局中,这儿可以在右侧对象中选择,然后将控件向上拖入红框中(发现这一步不做也可以,直接进行下一步,不清楚在窗体布局中布局这项是啥区别),最后再在窗体没有控件出右击-布局-选择水平或者垂直布局(因为我之前已经是栅格布局了,相当于只有一个整体布局,因此这里选择哪一个没有区别)下图是操作前后对象窗口的对比。
布局完成后效果如下:
总结:一开始绕弯主要在两个地方,一个是控件的SizePolicy属性设置,二是一定要设置顶级布局。