Qt 窗口部件适应窗口大小变化
VB中控件大小随窗体大小变化而变化

VB中控件大小随窗体大小变化而变化有时窗体变化后,如改变分辨率后控件大小却不能随之改变。
手工代码调整实在麻烦,下面的模块实现自动查找窗体上控件并使其改变大小以适应窗体变化。
在Form的Resize事件中调用函数Resize_All就能实现控件自动调整大小,如:Private Sub Form_Resize()Dim H, i As IntegerOn Error Resume NextResize_ALL Me 'Me是窗体名,Form1,Form2等等都可以End Sub在模块中添加以下代码:Public Type ctrObjName As StringIndex As LongParrent As StringTop As LongLeft As LongHeight As LongWidth As LongScaleHeight As LongScaleWidth As LongEnd TypePrivate FormRecord() As ctrObjPrivate ControlRecord() As ctrObjPrivate bRunning As BooleanPrivate MaxForm As LongPrivate MaxControl As LongPrivate Const WM_NCLBUTTONDOWN = &HA1Private Declare Function SendMessage Lib "USER32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongPrivate Declare Function ReleaseCapture Lib "USER32" () As Long Function ActualPos(plLeft As Long) As LongIf plLeft < 0 ThenActualPos = plLeft + 75000ElseActualPos = plLeftEnd IfEnd FunctionFunction FindForm(pfrmIn As Form) As LongDim i As LongFindForm = -1If MaxForm > 0 ThenFor i = 0 To (MaxForm - 1)If FormRecord(i).Name = ThenFindForm = iExit FunctionEnd IfNext iEnd IfEnd FunctionFunction AddForm(pfrmIn As Form) As LongDim FormControl As ControlDim i As LongReDim Preserve FormRecord(MaxForm + 1)FormRecord(MaxForm).Name = FormRecord(MaxForm).Top = pfrmIn.TopFormRecord(MaxForm).Left = pfrmIn.LeftFormRecord(MaxForm).Height = pfrmIn.Height FormRecord(MaxForm).Width = pfrmIn.Width FormRecord(MaxForm).ScaleHeight = pfrmIn.ScaleHeight FormRecord(MaxForm).ScaleWidth = pfrmIn.ScaleWidth AddForm = MaxFormMaxForm = MaxForm + 1For Each FormControl In pfrmIni = FindControl(FormControl, )If i < 0 Theni = AddControl(FormControl, )End IfNext FormControlEnd FunctionFunction FindControl(inControl As Control, inName As String) As LongDim i As LongFindControl = -1For i = 0 To (MaxControl - 1)If ControlRecord(i).Parrent = inName ThenIf ControlRecord(i).Name = ThenOn Error Resume NextIf ControlRecord(i).Index = inControl.Index ThenFindControl = iExit FunctionEnd IfOn Error GoTo 0End IfEnd IfNext iEnd FunctionFunction AddControl(inControl As Control, inName As String) As LongReDim Preserve ControlRecord(MaxControl + 1)On Error Resume NextControlRecord(MaxControl).Name = ControlRecord(MaxControl).Index = inControl.IndexControlRecord(MaxControl).Parrent = inNameIf TypeOf inControl Is Line ThenControlRecord(MaxControl).Top = inControl.Y1ControlRecord(MaxControl).Left = ActualPos(inControl.X1)ControlRecord(MaxControl).Height = inControl.Y2ControlRecord(MaxControl).Width = ActualPos(inControl.X2)ElseControlRecord(MaxControl).Top = inControl.TopControlRecord(MaxControl).Left = ActualPos(inControl.Left)ControlRecord(MaxControl).Height = inControl.HeightControlRecord(MaxControl).Width = inControl.WidthEnd IfinControl.IntegralHeight = FalseOn Error GoTo 0AddControl = MaxControlMaxControl = MaxControl + 1End FunctionFunction PerWidth(pfrmIn As Form) As LongDim i As Longi = FindForm(pfrmIn)If i < 0 Theni = AddForm(pfrmIn)End IfPerWidth = (pfrmIn.ScaleWidth * 100) \ FormRecord(i).ScaleWidth End FunctionFunction PerHeight(pfrmIn As Form) As DoubleDim i As Longi = FindForm(pfrmIn)If i < 0 Theni = AddForm(pfrmIn)End IfPerHeight = (pfrmIn.ScaleHeight * 100) \ FormRecord(i).ScaleHeight End FunctionPublic Sub ResizeControl(inControl As Control, pfrmIn As Form)On Error Resume NextDim i As LongDim widthfactor As Single, heightfactor As SingleDim minFactor As SingleDim yRatio, xRatio, lTop, lLeft, lWidth, lHeight As LongyRatio = PerHeight(pfrmIn)xRatio = PerWidth(pfrmIn)i = FindControl(inControl, )If inControl.Left < 0 ThenlLeft = CLng(((ControlRecord(i).Left * xRatio) \ 100) - 75000) ElselLeft = CLng((ControlRecord(i).Left * xRatio) \ 100)End IflTop = CLng((ControlRecord(i).Top * yRatio) \ 100)lWidth = CLng((ControlRecord(i).Width * xRatio) \ 100)lHeight = CLng((ControlRecord(i).Height * yRatio) \ 100)If TypeOf inControl Is Line ThenIf inControl.X1 < 0 TheninControl.X1 = CLng(((ControlRecord(i).Left * xRatio) \ 100) - 75000)ElseinControl.X1 = CLng((ControlRecord(i).Left * xRatio) \ 100) End IfinControl.Y1 = CLng((ControlRecord(i).Top * yRatio) \ 100)If inControl.X2 < 0 TheninControl.X2 = CLng(((ControlRecord(i).Width * xRatio) \ 100) - 75000)ElseinControl.X2 = CLng((ControlRecord(i).Width * xRatio) \ 100) End IfinControl.Y2 = CLng((ControlRecord(i).Height * yRatio) \ 100) ElseinControl.Move lLeft, lTop, lWidth, lHeightinControl.Move lLeft, lTop, lWidthinControl.Move lLeft, lTopEnd IfEnd SubPublic Sub ResizeForm(pfrmIn As Form)Dim FormControl As ControlDim isVisible As BooleanDim StartX, StartY, MaxX, MaxY As LongDim bNew As BooleanIf Not bRunning ThenbRunning = TrueIf FindForm(pfrmIn) < 0 ThenbNew = TrueElsebNew = FalseEnd IfIf pfrmIn.Top < 30000 ThenisVisible = pfrmIn.VisibleOn Error Resume NextIf Not pfrmIn.MDIChild ThenOn Error GoTo 0' ' pfrmIn.Visible = FalseElseIf bNew ThenStartY = pfrmIn.HeightStartX = pfrmIn.WidthOn Error Resume NextFor Each FormControl In pfrmInIf FormControl.Left + FormControl.Width + 200 > MaxX ThenMaxX = FormControl.Left + FormControl.Width + 200End IfIf FormControl.Top + FormControl.Height + 500 > MaxY ThenMaxY = FormControl.Top + FormControl.Height + 500End IfIf FormControl.X1 + 200 > MaxX ThenMaxX = FormControl.X1 + 200End IfIf FormControl.Y1 + 500 > MaxY ThenMaxY = FormControl.Y1 + 500End IfIf FormControl.X2 + 200 > MaxX ThenMaxX = FormControl.X2 + 200End IfIf FormControl.Y2 + 500 > MaxY ThenMaxY = FormControl.Y2 + 500End IfNext FormControlOn Error GoTo 0pfrmIn.Height = MaxYpfrmIn.Width = MaxXEnd IfOn Error GoTo 0End IfFor Each FormControl In pfrmInResizeControl FormControl, pfrmIn Next FormControlOn Error Resume NextIf Not pfrmIn.MDIChild ThenOn Error GoTo 0pfrmIn.Visible = isVisibleElseIf bNew ThenpfrmIn.Height = StartYpfrmIn.Width = StartXFor Each FormControl In pfrmInResizeControl FormControl, pfrmIn Next FormControlEnd IfEnd IfOn Error GoTo 0End IfbRunning = FalseEnd IfEnd SubPublic Sub SaveFormPosition(pfrmIn As Form)Dim i As LongIf MaxForm > 0 ThenFor i = 0 To (MaxForm - 1)If FormRecord(i).Name = ThenFormRecord(i).Top = pfrmIn.TopFormRecord(i).Left = pfrmIn.LeftFormRecord(i).Height = pfrmIn.HeightFormRecord(i).Width = pfrmIn.WidthExit SubEnd IfNext iAddForm (pfrmIn)End IfEnd SubPublic Sub RestoreFormPosition(pfrmIn As Form)Dim i As LongIf MaxForm > 0 ThenFor i = 0 To (MaxForm - 1)If FormRecord(i).Name = ThenIf FormRecord(i).Top < 0 ThenpfrmIn.WindowState = 2ElseIf FormRecord(i).Top < 30000 ThenpfrmIn.WindowState = 0pfrmIn.Move FormRecord(i).Left, FormRecord(i).Top, FormRecord(i).Width, FormRecord(i).HeightElsepfrmIn.WindowState = 1End IfExit SubEnd IfNext iEnd IfEnd SubPublic Sub Resize_ALL(Form_Name As Form)Dim OBJ As ObjectFor Each OBJ In Form_NameResizeControl OBJ, Form_NameNext OBJEnd SubPublic Sub DragForm(frm As Form)On Local Error Resume NextCall ReleaseCaptureCall SendMessage(frm.hwnd, WM_NCLBUTTONDOWN, 2, 0) End Sub。
cssqt控件统一大小

cssqt控件统一大小(实用版)目录1.CSS 中的盒模型2.控制控件大小的方法3.使用 CSS 设置控件统一大小4.实际应用案例正文一、CSS 中的盒模型在 CSS 中,一个控件的大小通常由盒模型决定。
盒模型包括内容(content)、内边距(padding)、边框(border)和外边距(margin)四个部分。
这四个部分共同决定了一个控件在页面上的实际大小。
二、控制控件大小的方法要控制控件的大小,可以通过修改盒模型的各个部分来实现。
以下是常用的几种方法:1.使用 width 和 height 属性:分别设置控件的宽度和高度。
2.使用 css 的 box-sizing 属性:设置盒模型的计算方式,如border-box 或 content-box。
3.使用内边距(padding):通过设置控件的内边距,来调整控件的实际大小。
4.使用边框(border):设置控件的边框宽度,从而影响控件的实际大小。
5.使用外边距(margin):设置控件的外边距,来调整控件与其他控件之间的间距。
三、使用 CSS 设置控件统一大小在实际开发中,为了保持界面的美观和统一,常常需要设置控件的统一大小。
以下是一个简单的示例:```css.control {width: 200px;height: 50px;margin: 10px;padding: 10px;border: 1px solid #ccc;}```在上述代码中,我们通过设置宽度、高度、内边距、边框和外边距,来统一控制控件的大小。
qt setlayout的用法 -回复

qt setlayout的用法-回复标题:Qt SetLayout的用法详解在Qt框架中,布局(Layout)是一种非常重要的机制,它负责控制用户界面中的部件(Widget)的位置和大小。
SetLayout函数是用于设置部件容器(Widget Container)的布局的一种方法。
本文将详细介绍如何使用SetLayout函数来实现布局的设置。
一、基本概念1. 布局(Layout):布局是一个容器,它可以包含多个部件,并决定这些部件在窗口中的位置和大小。
布局可以自动调整其包含的部件以适应窗口大小的变化。
2. 部件容器(Widget Container):部件容器是一个特殊的部件,它可以包含其他部件。
通常情况下,我们会在部件容器上设置布局,然后将其他部件添加到这个布局中。
3. SetLayout函数:SetLayout函数是用来设置部件容器的布局的函数。
它的原型为void QWidget::setLayout(QLayout *layout)。
二、创建布局在Qt中,我们可以使用QHBoxLayout、QVBoxLayout、QGridLayout 等类来创建布局。
例如,我们可以这样创建一个水平布局:cppQHBoxLayout *layout = new QHBoxLayout;三、添加部件到布局创建好布局后,我们可以使用addWiget()函数将部件添加到布局中。
例如,我们可以这样将两个按钮添加到上述的布局中:cppQPushButton *button1 = new QPushButton("Button 1"); QPushButton *button2 = new QPushButton("Button 2");layout->addWidget(button1);layout->addWidget(button2);四、设置布局创建好布局并添加好部件后,我们就可以使用setLayout()函数将布局设置到部件容器上了。
如何获得Qt窗口部件在主窗口中的位置

如何获得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结构中确定某⼀⼦部件的位置了,但⼀定要注意:
⽗关系,即当前部件于其⽗部件的相对位置,其⽗部件与上层部件的相对位置,
直到与主窗⼝的相对位置。
Qt Creator 窗体控件自适应窗口大小布局

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。
QtCreator快速入门经典

2.然后新建一个 Qt Designer Form Class 类,类名为 loginDlg,选用 Dialog without Buttons,将其加入上面的工程中。文件列表如下:
3.在 logindlg.ui 中设计下面的界面:行输入框为 Line Edit。其中用户名后面 的输入框在属性中设置其 object Name 为 usrLineEdit,密码后面的输入框为 pwdLineEdit,登录按钮为 loginBtn,退出按钮为 exitBtn。
Widget w;
if(my1.exec()==QDialog::Accepted) {
w.show(); } return a.exec();
}
这样虽然解决了上面主窗口一闪而过的问题,但是,如果在 my1 对话框出现的时 候不点 enterBtn,而是直接关闭对话框,那么此时整个程序应该结束执行,但 是事实是这样的吗?如果你此时对程序进行了改动,再次按下 run 按钮,你会发 现又出现了 error: collect2: ld returned 1 exit status 的错误,这说明程 序并没有结束,我们可以打开 windows 任务管理器,可以看到我们的程序仍在执 行。
种方法实现了信号和槽函数的关联,第一个按钮我们直接在设计器中实现其关
联;第二个按钮我们自己写了槽函数语句,其实图形的设计与直接写代码效果是
一样的。
这个程序里我们实现了两类窗口打开的方式,一个是自身消失而
后打开另一个窗口,一个是打开另一个窗口而自身不消失。可以看到他们实现的
方法是不同的。
三、Qt Creator 登录对话框(原创)
#ifndef WIDGET_H
#define WIDGET_H
QDialog可移动可变化大小及背景设置

添加定义#definePADDING2enum Direction{UP=0,DOWN=1,LEFT,RIGHT,LEFTTOP,LEFTBOTTOM,RIGHTBOTTOM,R IGHTTOP,NONE};1、在头文件中类添加函数和变量void mouseReleaseEvent(QMouseEvent*event);void mouseMoveEvent(QMouseEvent*event);void mousePressEvent(QMouseEvent*event);void region(const QPoint&cursorGlobalPoint);//鼠标全局位置bool isLeftPressDown;//判断左键是否按下QPoint dragPosition;//窗口移动拖动时需要记住的点Direction dir;//窗口大小改变时,记录改变方向2、在main函数中添加this->setWindowFlags(Qt::FramelessWindowHint|Qt::WindowSystemMenuHint ); //隐藏Dialog标题栏this->setStyleSheet("QDialog{background-color:#FFFFFF}""QDialog{border:2pxgroovegray;border-radius:10px;padding:2px4px}");//设置Dialog背景为白色,边框为圆角this->setMinimumHeight(480);this->setMinimumWidth(1250);isLeftPressDown=false;this->dir=NONE;this->setMouseTracking(true);//追踪鼠标3、实现方法void QDataTableDlg::region(const QPoint&cursorGlobalPoint){QRect rect=this->rect();QPoint tl=mapToGlobal(rect.topLeft());QPoint rb=mapToGlobal(rect.bottomRight());int x=cursorGlobalPoint.x();int y=cursorGlobalPoint.y();if(tl.x()+PADDING>=x&&tl.x()<=x&&tl.y()+PADDING>=y&&tl.y()<=y){//左上角dir=LEFTTOP;this->setCursor(QCursor(Qt::SizeFDiagCursor));//设置鼠标形状}elseif(x>=rb.x()-PADDING&&x<=rb.x()&&y>=rb.y()-PADDING&&y<=rb.y()){ //右下角dir=RIGHTBOTTOM;this->setCursor(QCursor(Qt::SizeFDiagCursor));}elseif(x<=tl.x()+PADDING&&x>=tl.x()&&y>=rb.y()-PADDING&&y<=rb.y()){ //左下角dir=LEFTBOTTOM;this->setCursor(QCursor(Qt::SizeBDiagCursor));}elseif(x<=rb.x()&&x>=rb.x()-PADDING&&y>=tl.y()&&y<=tl.y()+PADDING){ //右上角dir=RIGHTTOP;this->setCursor(QCursor(Qt::SizeBDiagCursor));}elseif(x<=tl.x()+PADDING&&x>=tl.x()){//左边dir=LEFT;this->setCursor(QCursor(Qt::SizeHorCursor));}elseif(x<=rb.x()&&x>=rb.x()-PADDING){//右边dir=RIGHT;this->setCursor(QCursor(Qt::SizeHorCursor));}elseif(y>=tl.y()&&y<=tl.y()+PADDING){//上边dir=UP;this->setCursor(QCursor(Qt::SizeVerCursor));}elseif(y<=rb.y()&&y>=rb.y()-PADDING){//下边dir=DOWN;this->setCursor(QCursor(Qt::SizeVerCursor));}else{//默认dir=NONE;this->setCursor(QCursor(Qt::ArrowCursor));}}void QDataTableDlg::mouseReleaseEvent(QMouseEvent*event){if(event->button()==Qt::LeftButton){isLeftPressDown=false;if(dir!=NONE){this->releaseMouse();this->setCursor(QCursor(Qt::ArrowCursor));}}}void QDataTableDlg::mousePressEvent(QMouseEvent*event){switch(event->button()){case Qt::LeftButton:isLeftPressDown=true;if(dir!=NONE){this->mouseGrabber();}else{dragPosition=event->globalPos()-this->frameGeometry().topLeft(); }break;case Qt::RightButton://this->close();break;default:QDialog::mousePressEvent(event);}}void QDataTableDlg::mouseMoveEvent(QMouseEvent*event){QPoint gloPoint=event->globalPos();QRect rect=this->rect();QPoint tl=mapToGlobal(rect.topLeft());QPoint rb=mapToGlobal(rect.bottomRight());if(!isLeftPressDown){this->region(gloPoint);}else{if(dir!=NONE){QRect rMove(tl,rb);switch(dir){case LEFT:if(rb.x()-gloPoint.x()<=this->minimumWidth())rMove.setX(tl.x());elserMove.setX(gloPoint.x());break;case RIGHT:rMove.setWidth(gloPoint.x()-tl.x());break;case UP:if(rb.y()-gloPoint.y()<=this->minimumHeight())rMove.setY(tl.y());elserMove.setY(gloPoint.y());break;case DOWN:rMove.setHeight(gloPoint.y()-tl.y());break;case LEFTTOP:if(rb.x()-gloPoint.x()<=this->minimumWidth()) rMove.setX(tl.x());elserMove.setX(gloPoint.x());if(rb.y()-gloPoint.y()<=this->minimumHeight()) rMove.setY(tl.y());elserMove.setY(gloPoint.y());break;case RIGHTTOP:rMove.setWidth(gloPoint.x()-tl.x());rMove.setY(gloPoint.y());break;case LEFTBOTTOM:rMove.setX(gloPoint.x());rMove.setHeight(gloPoint.y()-tl.y());break;case RIGHTBOTTOM:rMove.setWidth(gloPoint.x()-tl.x());rMove.setHeight(gloPoint.y()-tl.y());break;default:break;}this->setGeometry(rMove);}else{move(event->globalPos()-dragPosition);event->accept();}}QDialog::mouseMoveEvent(event);}。
qt的setwidgetfixedsize函数机制

Qt的setWidgetFixedSize函数机制1. 概述Qt是一款跨评台的C++应用程序开发框架,提供了丰富的工具和库,方便开发者进行图形用户界面(GUI)程序的开发。
在Qt中,setWidgetFixedSize函数是常用的函数之一,用于设置窗口部件的固定大小。
本文将探讨setWidgetFixedSize函数的机制及其使用方法。
2. setWidgetFixedSize函数的作用setWidgetFixedSize函数用于设置窗口部件(Widget)的固定大小,即禁止用户通过拖拽窗口大小的方式改变窗口部件的大小。
这在一些需求下是非常重要的,比如当窗口部件的布局已经经过精心设计,不希望用户随意改变窗口大小时,就可以使用setWidgetFixedSize函数来锁定窗口部件的大小。
3. setWidgetFixedSize函数的参数setWidgetFixedSize函数的参数为窗口部件的宽度和高度,如下所示:```cppvoid QWidget::setFixedSize(int w, int h)```其中,w为窗口部件的宽度,h为窗口部件的高度。
4. setWidgetFixedSize函数的调用setWidgetFixedSize函数通常在窗口部件的构造函数或初始化函数中进行调用,代码示例如下:```cppQM本人nWindow *m本人nWindow = new QM本人nWindow; m本人nWindow->setFixedSize(800, 600);```以上代码中,创建了一个主窗口部件m本人nWindow,并设置其固定大小为800x600像素。
5. setWidgetFixedSize函数的机制setWidgetFixedSize函数的机制是通过设置窗口部件的最小和最大大小来实现的。
一旦调用了setWidgetFixedSize函数,窗口部件的最小和最大大小都会被设置为函数参数指定的大小,即窗口部件无法再通过用户拖拽改变大小。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
widget跟随窗口调整
UI界面控件随窗口自适应变化大小
通过Qt Creator的设计模式实现,无需增加代码。
如下图,实现对最下层tableview大小跟随窗口调整:
1、界面空白处右击,选择布局-->栅格布局,这会使centralWidget布局设置为GridLayout。
然后界面中的部件会自动添加到栅格布局中,此时的部件会根据窗口大小自动调整大小。
2、但是部件的大小却不是我们希望的,极不协调,接下来就需要调整每个控件的设置。
调整控件Size的项目包括:sizePolicy、minimumSize、maxmumSize
比如将上面的第三行的lineEdit限制高度:
这样,在调整窗口大小的时候,lineEdit控件只能任意改变宽度,而高度则被限制在30个像素内。
(调整之后效果)
注意:
有些情况下设置了上面的操作步骤之后,但似乎没有起作用。
比如上面例子中第一行的几个空间,虽然设置了sizePolicy以及宽度、高度限制,但是还是随着界面改变。
这个时候,就需要添加 Spacer(看起来像弹簧的控件),之后就能解决问题了。
这是因为GridLayout布局的影响,他必须让布局之内的区域布满控件,而不能有空白,所以即使设置了大小限制,仍然会被拉伸。
添加Spacer就是为了填充多余的区域。