Qt在停靠窗口上添加控件(实现工具箱功能)

本文介绍了如何在Qt中利用QDockWidget添加自定义控件,创建一个名为CToolkit的类继承自QWidget,设计所需布局。通过将此类实例作为参数,可以将自定义窗口添加为停靠窗口,实现类似工具箱的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于QDockWidget只是提供一个可停靠的地方,接受一个QWidget*类型的形参,如果要添加已有的控件,只要是继承自QWidget的都可添加,如果要添加自定义的控件,应该新建一个类以继承自QWidget然后在该类中设计要添加的控件和布局。该类设计完成后应该作为一个整体当做实参传给addDockWidget即可实现添加自定义窗口为停靠窗口。


Example: 此例子主要以实现一个简单工具箱的布局为目的

//创建一个类继承自QWidget,此处类名为 CToolkit

//头文件内容如下:

#ifndef TOOLKIT_H
#define TOOLKIT_H

#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QButtonGroup>
#include <QSize>

class CToolkit : public QWidget
{
    Q_OBJECT
public:
    explicit CToolkit(QWidget *parent = 0);
    ~CToolkit();
    
signals:
    
public slots:

    
private:

    //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:
    QWidget *m_pBasWidget;
    QWidget *m_pExtWidget;
    QWidget *m_pUIWidget;

private:
    QButtonGroup *m_pBasGropBox;
    QButtonGroup *m_pExtGropBox;
    QButtonGroup *m_pUIGropBox;


public slots:
    int basicGroupBoxClicked(int);
    int extensionGroupBoxClicked(int);
    int UIGroupBoxClicked(int);

public:
    int drawType;     //1 indicate basic type, 2 indicate extension type, 3 indicate UI type


private:
    void createBasicBtns();
    void createUIBtns();
    void createExtensionBtns();
};

#endif // TOOLKIT_H




//实现文件内容如下:

#include "toolkit.h"
#include <QLabel>
#include <QPushButton>
#include <QGridLayout>
#include <QToolBox>

CToolkit::CToolkit(QWidget *parent) :
    QWidget(parent)
{
    createBasicBtns();
    createExtensionBtns();
    createUIBtns();

    drawType = 0;

    QVBoxLayout *mainLayout =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值