qt widget 置顶 设置圆框_QWidget动态布局 Qt在停靠窗口上添加控件(实现工具箱功能) | 学步园...

QWidget上放置的控件,如果想要保证自己的控件大小不变并能根据窗口的大小动态调整位置,则需要重载QWidget下的resizeEvent(函数原型:voidresizeEvent(QResizeEvent*);)函数,该函数用于重新计算窗口并布局。

使用布局管理器并不能实现该功能,由于布局管理器会根据窗口大小进行相应的放大和缩小,其上面的控件跟着对应变化,所以只能重载该函数来实现窗口的动态布局。

Example:仍以工具箱的实现为例跟之前的文章:

//头文件内容如下:

#ifndef TOOLKIT_H

#define TOOLKIT_H

#define BUTTONWIDTH 16

#define BUTTONHEIGHT 16

#define WIDTHINTERVAL 21

#define HEIGHTINTERVAL 21

#define LINEWIDTH 30

#include

#include

#include

#include

#include

#include

class CToolkit : public QWidget

{

Q_OBJECT

public:

explicit CToolkit(QWidget *parent = 0);

~CToolkit();

signals:

public slots:

private:

void initUI();

//basic buttons

QPushButton * basPotBtn; //draw pointer

QPushButton * basLineBtn; //draw line

QPushButton * basPolygonaLineBtn; //draw polygon line

QPushButton * basArcBtn; //draw arc

QPushButton * basCurveBtn; //draw curve

QPushButton * basBasselCurveBtn; //draw bassel curve

QPushButton * basRectangleBtn; //draw rectangle

QPushButton * basRoundRectBtn; //draw round rectangle

QPushButton * basCircleBtn; //draw circle

QPushButton * basSectorBtn; //draw sector

QPushButton * basHalfCirBtn; //draw half circle

QPushButton * basPolygonBtn; //draw polygon

QPushButton * basEnclosedCurBtn; //draw closed curve

QPushButton * basEnclosedBasselCurBtn; //draw closed bassel curve

QPushButton * basTextBtn; //draw text

QPushButton * basPumpBtn; //draw pump

//extension buttons

QPushButton *extPotBtn; //draw point

QPushButton *extBtnBtn; //draw button

QPushButton *extPicBtn; //draw picture

QPushButton *extTreLineBtn; //draw trend line

QPushButton *extAlaWndBtn; //draw alarm window

QPushButton *extXYTreBtn; //draw XY trend

QPushButton *extEveWndBtn; //draw event window

QPushButton *extVerRuleBtn; //draw vertical ruler

QPushButton *extHorRuleBtn; //draw horizontal ruler

QPushButton *extBarPicBtn; //draw bar picture

QPushButton *extMenuBtn; //draw menu

QPushButton *extRepBtn; //draw report

//UI buttons

QPushButton *UIPotBtn; //draw point

QPushButton *UIBtnBtn; //draw button

QPushButton *UICheBtn; //draw checkbox

QPushButton *UITextBtn; //draw textedit

QPushButton *UIComBtn; //draw combobox

QPushButton *UILstBtn; //draw listbox

QPushButton *UISigBtn; //draw siglebox

QPushButton *UITreeBtn; //draw treeview

QPushButton *UICalBtn; //draw calender

QPushButton *UIMulTextBtn; //draw multify textedit

QPushButton *UIDateBtn; //draw datetime

QPushButton *UIRelBtn; //draw relative datetime

QPushButton *MulTreeBtn; //draw multify treeview

private:

//用于在绘制的时候确定要绘制哪一个图形

QButtonGroup *m_pBasGropBox;

QButtonGroup *m_pExtGropBox;

QButtonGroup *m_pUIGropBox;

//把已经创建的三组按钮分别保存用于在重新布局时使用

QVector mBasBtns;

QVector mExtBtns;

QVector mUIBtns;

void addBtnsToGroupBox();

void addBtnsToVector();

public slots:

void basicGroupBoxClicked(int);

void extensionGroupBoxClicked(int);

void UIGroupBoxClicked(int);

public:

int mDrawType; //1 indicate basic type, 2 indicate extension type, 3 indicate UI type

int mDrawIndex; //mDrawIndex从-1开始递减

private:

//初始化基本、扩展和UI按钮

void createBasicBtns();

void createExtensionBtns();

void createUIBtns();

int mBasLineHeiLoc; //基本按钮上面的线条的相对高度

int mExtLineHeiLoc; //扩展按钮上面的线条的相对高度

int mUILineHeiLoc; //UI按钮上面的线条的相对高度

int mCurLocWidth; //当前在窗口中的相对宽度

int mCurLocHeight; //当前在窗口中的相对高度

int mWndWidth; //当前窗口的宽度

//保存基本属性按钮和扩展按钮的个数,用于布局时高度的计算

int mBasicBtnNums;

int mExtBtnNums;

//由于写的控制布局的

//实现文件内容如下:

#include "toolkit.h"

#include

#include

#include

CToolkit::CToolkit(QWidget *parent) :

QWidget(parent)

{

initUI();

}

CToolkit::~CToolkit()

{

//basic buttons

delete basPotBtn; //draw pointer

delete basLineBtn; //draw line

delete basPolygonaLineBtn; //draw polygon line

delete basArcBtn; //draw arc

delete basCurveBtn; //draw curve

delete basBasselCurveBtn; //draw bassel curve

delete basRectangleBtn; //draw rectangle

delete basRoundRectBtn; //draw round rectangle

delete basCircleBtn; //draw circle

delete basSectorBtn; //draw sector

delete basHalfCirBtn; //draw half circle

delete basPolygonBtn; //draw polygon

delete basEnclosedCurBtn; //draw closed curve

delete basEnclosedBasselCurBtn; //draw closed bassel curve

delete basTextBtn; //draw text

delete basPumpBtn; //draw pump

//extension buttons

delete extPotBtn; //draw point

delete extBtnBtn; //draw button

delete extPicBtn; //draw picture

delete extTreLineBtn; //draw trend line

delete extAlaWndBtn; //draw alarm window

delete extXYTreBtn; //draw XY trend

delete extEveWndBtn; //draw event window

delete extVerRuleBtn; //draw vertical ruler

delete extHorRuleBtn; //draw horizontal ruler

delete extBarPicBtn; //draw bar picture

delete extMenuBtn; //draw menu

delete extRepBtn; //draw report

//UI buttons

delete UIPotBtn; //draw point

delete UIBtnBtn; //draw button

delete UICheBtn; //draw checkbox

delete UITextBtn; //draw textedit

delete UIComBtn; //draw combobox

delete UILstBtn; //draw listbox

delete UISigBtn; //draw siglebox

delete UITreeBtn; //draw treeview

delete UICalBtn; //draw calender

delete UIMulTextBtn; //draw multify textedit

delete UIDateBtn; //draw datetime

delete UIRelBtn; //draw relative datetime

delete MulTreeBtn; //draw multify treeview

}

void CToolkit::initUI()

{

mDrawType = 0;

mDrawIndex = 0;

mBasLineHeiLoc = 0;

mExtLineHeiLoc = 0;

mUILineHeiLoc = 0;

mBasicBtnNums = 16;

mExtBtnNums = 12;

createBasicBtns();

createExtensionBtns();

createUIBtns();

addBtnsToGroupBox();

addBtnsToVector();

}

<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值