由于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 =