qwidget 控件 怎样提升为自定义是控件_揭开现象看本质——布局原理解析及自定义布局...

虽然标准布局可以帮助我们解决很多问题,但是有时候需要一些特殊的布局管理器来管理控件,所以我们需要制作一个自定义布局。

本节小豆君就来给大家分享如何自定义布局管理器,并且通过自己定义的布局管理器来了解布局的内部是如何工作的。

打开标准布局的头文件(QVBoxLayout,QHBoxLayout等),你会发现它们都直接或间接继承于QLayout,自然的,自定义布局也要继承QLayout。

QLayout继承于QObject和QLayoutItem,QLayoutItem是一个抽象类。

一般的,在继承类中,我们重点要关注这个基类中的虚函数,下面列出了QLayout的虚函数:

//添加一个QLayoutItem,当调用addWidget时,也会调用此函数

//在布局中,每添加一个控件,就会相应的增加一个QLayoutItem,

//用来管理每个控件在布局中的大小策略

virtual void addItem(QLayoutItem *) = 0;

//用于计算每个子控件在父窗口中的位置和大小

virtual void setGeometry(const QRect&) Q_DECL_OVERRIDE;

//获取第index个QLayoutItem

virtual QLayoutItem *itemAt(int index) const = 0;

//出栈一个QLayoutItem,并且返回该QLayoutItem的指针

virtual QLayoutItem *takeAt(int index) = 0;

//返回QLayoutItem*的个数

virtual int count() const = 0;

//大小提示

//这个虚函数是属于QLayoutItem的接口

//关于大小提示的信息,可查看上一节标准布局管理器三中的布局原理

QSize   sizeHint() const;

3.2.1 金字塔布局

这个布局会在第一行放置一个控件,第二行放置两个控件。。。以此类推。

效果图:

574896ff021a5c58663c731179f02081.png

这是如何实现的呢,直接上代码。

新建项目CustomLayout,类名为CustomLayout,基类为QWidget,不需要创建ui文件

customlayout.h

#ifndef CUSTOMLAYOUT_H

#define CUSTOMLAYOUT_H

#include <QWidget>

class CustomLayout : public QWidget

{

   Q_OBJECT

public:

   CustomLayout(QWidget *parent = 0);

   ~CustomLayout();

};

#endif // CUSTOMLAYOUT_H

customlayout.cpp

#include <QLabel>

#include "customlayout.h"

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值