如何自动改变窗口中各个控件的大小

时间:2022-12-10 03:47:39
   如何使窗口中的Label,Button,TabWidget,pixmap等,随着窗口的拉动,自动调整自身的大小?
   注意,是Label,Button,TabWidget,pixmap这几个控件都要自动调整哦。谢谢了。

18 个解决方案

#1


还是用QHBoxLayou,QVBoxLayout吧,还比较方便

#2


引用楼主 yunjintou 的回复:
   如何使窗口中的Label,Button,TabWidget,pixmap等,随着窗口的拉动,自动调整自身的大小?
   注意,是Label,Button,TabWidget,pixmap这几个控件都要自动调整哦。谢谢了。


如果期望大小能随窗口大小变化, 首先各控件相应方向上的策略改成Expanding(初级做法), 再者对窗体进行布局, 这个时候可以多用QBoxLayout或QGridLayout进行布局即可~`

#3


用布局可以达到效果~

#4


使用各种layout就好了,如果某个wiget需要在某种size的时候有限定的话(比如,当x大于100像素的时候如何如何),则可以把sizeChange这个SIGNAL和自定义的SLOT connect起来

#5


QHBoxLayout *editL = new QHBoxLayout;
editL->setSpacing(30);
editL->addWidget(IDC_STATIC_DEFAULT_LIB);
editL->addWidget(IDC_EDIT_DEFAULT_LIB);
QGridLayout *libLayout = new QGridLayout;
libLayout->setHorizontalSpacing(10);
libLayout->setColumnStretch(0,1);

#6


不好意思 ,发错啦

#7




QPushButton *button=  new QPushButton(tr("Text"));
QHBoxLayout *buttonLayout = new QHBoxLayout;
buttonLayout->addStretch(1);
buttonLayout->addWidget(button);

QGridLayout *layout = new QGridLayout;
layout->setRowStretch(0,1);
layout->addLayout(buttonLayout );
setLayout(layout);


对于任何一个你想只适应大小的加上 “stretch ”就可以办到。 以上代码可以实现Test 按钮一直处于对话框的右下角

#8


layout

#9


用GridLayout,最强大的布局方式

#10


    Layout是不是只能对付Widget啊?我的那些部件都是在MainWindow中手工添加好了的。我把部件拖入GridLayout,我拉动WainWindow,它们根本就不动啊。

#11


   我现在可以实现的,都是在整个MainWindow窗口中,部件可以改变大小。
    但是,我并不想让某个按钮占满整个窗口啊

#12


引用 11 楼 yunjintou 的回复:
   我现在可以实现的,都是在整个MainWindow窗口中,部件可以改变大小。
    但是,我并不想让某个按钮占满整个窗口啊


你可以设定按钮的sizePolicy属性设置成Fixed, 或者可以通过添加弹簧来限制它的扩展~``

#13


  哦。对的,这个是可以实现了。但还有一个问题,我的Mainwindow中还有画布(满足其他需要)。
  请问,怎么让这个画布,也一起伸缩呢。谢谢

#14


   请问,怎么添加弹簧呢

#15


    由于,我要留一个区域来画图。请问能不能让其他部件,在左半边窗口中自动调整。而让pixmap在右半边窗口中自动调整呢

#16


引用 15 楼 yunjintou 的回复:
    由于,我要留一个区域来画图。请问能不能让其他部件,在左半边窗口中自动调整。而让pixmap在右半边窗口中自动调整呢

你可以用两个QWidget放在窗口中水平布局, 然后把"其它部件"放在左边的QWidget中, 把"画图区域"放在右边的QWidget中即可~``

#17


   我试试吧,谢谢各位了!!

#18


引用 16 楼 lefttime 的回复:
引用 15 楼 yunjintou 的回复:

由于,我要留一个区域来画图。请问能不能让其他部件,在左半边窗口中自动调整。而让pixmap在右半边窗口中自动调整呢

你可以用两个QWidget放在窗口中水平布局, 然后把"其它部件"放在左边的QWidget中, 把"画图区域"放在右边的QWidget中即可~``

3Q……!

#1


还是用QHBoxLayou,QVBoxLayout吧,还比较方便

#2


引用楼主 yunjintou 的回复:
   如何使窗口中的Label,Button,TabWidget,pixmap等,随着窗口的拉动,自动调整自身的大小?
   注意,是Label,Button,TabWidget,pixmap这几个控件都要自动调整哦。谢谢了。


如果期望大小能随窗口大小变化, 首先各控件相应方向上的策略改成Expanding(初级做法), 再者对窗体进行布局, 这个时候可以多用QBoxLayout或QGridLayout进行布局即可~`

#3


用布局可以达到效果~

#4


使用各种layout就好了,如果某个wiget需要在某种size的时候有限定的话(比如,当x大于100像素的时候如何如何),则可以把sizeChange这个SIGNAL和自定义的SLOT connect起来

#5


QHBoxLayout *editL = new QHBoxLayout;
editL->setSpacing(30);
editL->addWidget(IDC_STATIC_DEFAULT_LIB);
editL->addWidget(IDC_EDIT_DEFAULT_LIB);
QGridLayout *libLayout = new QGridLayout;
libLayout->setHorizontalSpacing(10);
libLayout->setColumnStretch(0,1);

#6


不好意思 ,发错啦

#7




QPushButton *button=  new QPushButton(tr("Text"));
QHBoxLayout *buttonLayout = new QHBoxLayout;
buttonLayout->addStretch(1);
buttonLayout->addWidget(button);

QGridLayout *layout = new QGridLayout;
layout->setRowStretch(0,1);
layout->addLayout(buttonLayout );
setLayout(layout);


对于任何一个你想只适应大小的加上 “stretch ”就可以办到。 以上代码可以实现Test 按钮一直处于对话框的右下角

#8


layout

#9


用GridLayout,最强大的布局方式

#10


    Layout是不是只能对付Widget啊?我的那些部件都是在MainWindow中手工添加好了的。我把部件拖入GridLayout,我拉动WainWindow,它们根本就不动啊。

#11


   我现在可以实现的,都是在整个MainWindow窗口中,部件可以改变大小。
    但是,我并不想让某个按钮占满整个窗口啊

#12


引用 11 楼 yunjintou 的回复:
   我现在可以实现的,都是在整个MainWindow窗口中,部件可以改变大小。
    但是,我并不想让某个按钮占满整个窗口啊


你可以设定按钮的sizePolicy属性设置成Fixed, 或者可以通过添加弹簧来限制它的扩展~``

#13


  哦。对的,这个是可以实现了。但还有一个问题,我的Mainwindow中还有画布(满足其他需要)。
  请问,怎么让这个画布,也一起伸缩呢。谢谢

#14


   请问,怎么添加弹簧呢

#15


    由于,我要留一个区域来画图。请问能不能让其他部件,在左半边窗口中自动调整。而让pixmap在右半边窗口中自动调整呢

#16


引用 15 楼 yunjintou 的回复:
    由于,我要留一个区域来画图。请问能不能让其他部件,在左半边窗口中自动调整。而让pixmap在右半边窗口中自动调整呢

你可以用两个QWidget放在窗口中水平布局, 然后把"其它部件"放在左边的QWidget中, 把"画图区域"放在右边的QWidget中即可~``

#17


   我试试吧,谢谢各位了!!

#18


引用 16 楼 lefttime 的回复:
引用 15 楼 yunjintou 的回复:

由于,我要留一个区域来画图。请问能不能让其他部件,在左半边窗口中自动调整。而让pixmap在右半边窗口中自动调整呢

你可以用两个QWidget放在窗口中水平布局, 然后把"其它部件"放在左边的QWidget中, 把"画图区域"放在右边的QWidget中即可~``

3Q……!