qt 布局怎么定位我想要的位置

qt 布局怎么定位我想要的位置,第1张

狭义的说,Qt的布局管理框架指的是以QLayoutItem/QLayout为基类的布局管理体系(应该说,对于QGraphicsSystem, 还有以QGraphicsLayoutItem/QGraphicsLayout为基类的一系列相关子类)但是如果广义的说,布局就是管理控件的位置和尺寸的话,在QT中一共有三种方式绝对定位:在代码中调用QWidget::setGeometry()函数,对控件进行绝对定位手工定位:在resizeEvent等函数中,根据参数变化,撰写代码对控件进行定位使用布局管理器定位:使用QLayout类管理控件布局 VS 控件在GTK中,Layout和Widget并没有截然分开,不存在单独的Layout类,每个控件都要自己负责管理自己的子控件的布局,只不过有些控件管理的多些,或者基本上专门用来管理布局,而有些则管理的少一些。而在QT中,Layout和Widget是相对独立的类,但是Layout本身单独存在并没有意义,需要和Widget配合使用。而Widget本身不负责子控件的布局管理。你可以认为,Layout类其实只是一组预先撰写好的代码,在父控件尺寸变化时,根据预设参数和子控件的各种Geometry hint,管理控件的位置和尺寸。不过,也有一些例外,比如QMainWindow类,就自己管理预设的子控件的布局。一点内部逻辑**Layout如何管理Widget,层次关系**首先是要通过QWidget::setLayout函数,将一个QLayout类设置为控件的布局管理器。这一步实际也将这个控件设置为QLayout类的父控件。而后,通常通过QLayout::addWidget()等函数,将widget添加到Layout类的布局管理体系中但是,Layout本身并不是Widget的父控件,因为QWidget类的父控件只能是QWidget类,所以Layout将其管理的子控件的父控件重定向为自己的父控件。另外,因为QWidget类本身并不是一个QLayoutItem,而Qlayout的管理又是以QLayoutItem为单位。所以,在addWidget的 *** 作中,QLayout还会创建一个QLayoutItem的子类QWidgetItem类来对应的包装代理添加进来的子控件。QWidgetItem对象最终会将QLayout布局管理体系中的布局参数信息装换、设置到它所代理的QWidget对象上分组式(堆栈式)布局QStackedLayout个人觉得叫分组布局有些歧义,还是直译堆栈布局比较合适。这个Layout类管理子控件的方式和其它QBoxLayout,QGridLayout等不太一样,比较特殊。QStackedLayout不侧重于子控件的位置管理,它所管理的子控件是叠加在一起的,主要控制哪个子控件位于最上层可以通过设置参数,决定只有当前顶层控件可见(默认行为),还是所有子控件都可见(这样可以实现一些比如叠加显示的效果,当然,要最上层的控件有透明的区域)。另外,不管堆叠参数如何设置,QStackedLayout的父控件的内容都是可见的,只要当前显示的子控件有透明区域。

这里我们一般可以对窗口整体进行布局,我们要用到Layout布局部件。 Layout是一种各种UI都很长用的布局手段,Qt的就很不错,比如说GridLayout,你可以把整个窗体布局一个GridLayout, 然后再往GridLayout里面放控件或者其他布局,这种布局的手段可以随窗体变化而改变布局内的控件的大小,而相对的位置不变。 设置qtablewidget为主窗口的中心部件。 代码设置方式: setCentralWidget(qwidget的名字) 窗口变化时窗口内的部件依然按照原排列方式铺满窗口,则只需设置窗口如下: 直接为QMainWindow设置一个局部方式即可,水平或垂直布局都可以 使用布局时,在复杂的情况下,需要结合很多的手段才可以达到理想的效果,而且一般使用手写代码更为方便。有几个因素供参考: 1.大小提示(size hint)和最小大小提示(minimum size hint) 2.大小策略(size policy) 3.伸缩因子(stretch factor) 4.大小约束(size constraint) 5.空白(margin)和间距(spacing) 还有,对于布局而言,对于一个窗口,要达到你说的那个基本目标,首要的就是要设置顶级布局(Top Level Layout)。比 如用designer时要注意, 要点中外层的widget然后选layout, 而不是选中若干子控件再选layout, 因为后者的layout和外

很简单,只需要在窗口中拖进一个QScrollArea控件,然后再将一个QWidget控件拖动到QScrollArea控件中成为它的子控件,这样只需要在程序中将新建的控件(父节点要设为这个QWidget),通过setGeometry函数将位置设置在QWidget上,注意当控件位置超出QScrollArea时,要将这个QWidget的size最初相应的拉长,拉大,这样QScrollArea就会自动添加一个滚动条了。

还是不懂的话请留言,方便咨询。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11645727.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存