标题:QT源码中代码书写方式,还挺有意思
作者:fpc_diesel
日期:2019-11-22 09:53
内容:
#switchbutton_p.h(需要在pro文件里面QT += [backcolor=#ffddff]widgets-private,至于为什么,你不加就知道了[/backcolor])
#ifndef SWITCHBUTTON_P_H
#define SWITCHBUTTON_P_H
#include
#include "private/qwidget_p.h"
#include "switchbutton.h"
#include "qglobal.h"
class SwitchButtonPrivate: public QWidgetPrivate
{
public:
SwitchButtonPrivate();
void init();
int m_radius = 8;
};
#endif // SWITCHBUTTON_P_Hswitchbutton.h
#ifndef SWICTHBUTTON_H
#define SWICTHBUTTON_H
#include
#include "qglobal.h"
class SwitchButtonPrivate;
class SwitchButton : public QWidget
{
Q_OBJECT
public:
SwitchButton(QWidget *parent = nullptr);
int radius();
void setRaius(int radius);
private:
Q_DECLARE_PRIVATE(SwitchButton)
protected:
virtual void paintEvent(QPaintEvent *event) override;
};
#endif // SWICTHBUTTON_H
switchButton.cpp
#include "switchbutton.h"
#include "switchbutton_p.h"
#include
SwitchButtonPrivate::SwitchButtonPrivate()
{
}
void SwitchButtonPrivate::init()
{
m_radius = 0;
}
SwitchButton::SwitchButton(QWidget *parent)
: QWidget(*new SwitchButtonPrivate, parent, 0)
{
Q_D(SwitchButton);
d->init();
}
int SwitchButton::radius()
{
Q_D(SwitchButton);
return d->m_radius;
}
void SwitchButton::setRaius(int radius)
{
Q_D(SwitchButton);
d->m_radius = radius;
update();
}
void SwitchButton::paintEvent(QPaintEvent *event)
{
Q_D(SwitchButton);
QPainter pain ..
#1 [liudianwu 11-22 10:54]
这就是所谓的q指针和d指针,说的通俗点就是将私有的变量和方法重新写一个类存储。隐藏用户不需要关心的实现细节。