my_namespace.h
#ifndef MY_NAMESPACE_H
#define MY_NAMESPACE_H
#include <QLabel>
#include <QtGlobal>
#include <QWidget>
#include <QLabel>
#include <QString>
#include <QPainter>
#include <QStylePainter>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QFrame>
namespace my_namespace {
typedef quint16 WidgetType;
typedef quint16 WidgetIdent;
typedef quint16 ParentIdent;
typedef quint8 Visible;
typedef quint8 Anonymous;
typedef quint16 StyleSet;
typedef qint32 PosX;
typedef qint32 PosY;
typedef quint32 SizeX;
typedef quint32 SizeY;
typedef quint8 uchar;
typedef quint16 ushort;
typedef quint32 uLong;
typedef qint32 Long;
typedef QString string;
#define Q_PROPERTY_WITH_WIDGETTYPE(type,name,getter,setter,wtype) \
private: type _##name; \
public: Q_PROPERTY(type name READ getter WRITE setter) \
public slots:\
void setter(type &v) \
{\
if(v == _##name)\
return;\
_##name = v; \
v = type::wtype;\
}\
public: \
type & getter() \
{return _##name;}
#define Q_PROPERTY_WITH_ONOROFF(type,name,getter,setter,informer) \
private: type _##name; \
public: Q_PROPERTY(type name READ getter WRITE setter NOTIFY informer) \
public slots:\
void setter(type &v) \
{\
if(v == _##name)\
return;\
_##name = v; \
emit informer(_##name);\
switch(v){\
case type::A661_TRUE:setWidgetIdent(99); \
break;\
case type::A661_FALSE: setWidgetIdent(24);\
break; \
}\
}\
public: \
type & getter() \
{return _##name;}
#define Q_PROPERTY_WITH_INT(type,name,getter,setter) \
private: name _##name; \
public: Q_PROPERTY(type name READ getter WRITE setter) \
name const& getter() const {return _##name;} \
void setter(name const &v) {_##name = v;}
#define Q_PROPERTY_POSITIONX(type,name,getter,setter) \
private: name _##name; \
public: Q_PROPERTY(type name READ getter WRITE setter) \
name const& getter() const {return _##name;} \
void setter(name const &v) {_##name = v;\
this->setGeometry(_##name,this->frameGeometry().y(),frameGeometry().width(),frameGeometry().height()); \
update();}
#define Q_PROPERTY_POSITIONY(type,name,getter,setter) \
private: name _##name; \
public: Q_PROPERTY(type name READ getter WRITE setter) \
name const& getter() const {return _##name;} \
void setter(name const &v) {_##name = v;\
this->setGeometry(this->frameGeometry().x(),_##name,frameGeometry().width(),frameGeometry().height()); \
update();}
#define Q_PROPERTY_POSITIONW(type,name,getter,setter) \
private: name _##name; \
public: Q_PROPERTY(type name READ getter WRITE setter) \
name const& getter() const {return _##name;} \
void setter(name const &v) {_##name = v;\
this->setGeometry(this->frameGeometry().x(),this->frameGeometry().y(),static_cast<int>(_##name),frameGeometry().height()); \
update();}
#define Q_PROPERTY_POSITIONH(type,name,getter,setter) \
private: name _##name; \
public: Q_PROPERTY(type name READ getter WRITE setter) \
name const& getter() const {return _##name;} \
void setter(name const &v) {_##name = v;\
this->setGeometry(this->frameGeometry().x(),this->frameGeometry().y(),frameGeometry().width(),static_cast<int>(_##name)); \
update();}
}
using namespace my_namespace;
class classB: public QWidget{
Q_OBJECT
public:
enum ONOROFF
{
A661_FALSE = 0x0000,
A661_TRUE = 0x0001
};
Q_ENUM(ONOROFF)
Q_DECLARE_FLAGS(Enum_testFlags,ONOROFF)
Q_FLAG(Enum_testFlags)
enum WIDGET_LIB
{
A661_LABEL = 0x01,
A661_PICTURE = 0x02
};
Q_ENUM(WIDGET_LIB)
Q_DECLARE_FLAGS(Enum_LibFlags,WIDGET_LIB)
Q_FLAG(Enum_LibFlags)
};
#endif
tom_label.h
#ifndef TOM_LABEL_H
#define TOM_LABEL_H
#include <QWidget>
#include <QLabel>
#include "my_namespace.h"
using namespace my_namespace;
class Tom_Label : public QGraphicsView
{
Q_OBJECT
Q_PROPERTY_WITH_WIDGETTYPE(classB::WIDGET_LIB,WidgetType,getWidgetType,setWidgetType,A661_LABEL)
Q_PROPERTY_WITH_INT(int,WidgetIdent,getWidgetIdent,setWidgetIdent)
Q_PROPERTY_WITH_INT(int,ParentIdent,getParentIdent,setParentIdent)
Q_PROPERTY_WITH_ONOROFF(classB::ONOROFF,Visible,getVisible,setvisible,testChanged)
Q_PROPERTY_WITH_ONOROFF(classB::ONOROFF,Anonymous,getAnonymous,setAnonymous,testChanged)
Q_PROPERTY_WITH_INT(int,StyleSet,getStyleSet,setStyleSet)
Q_PROPERTY_POSITIONX(int,PosX,getPosX,setPosX)
Q_PROPERTY_POSITIONY(int,PosY,getPosY,setPosY)
Q_PROPERTY_POSITIONW(int,SizeX,getSizeX,setSizeX)
Q_PROPERTY_POSITIONH(int,SizeY,getSizeY,setSizeY)
Q_PROPERTY(int MaxStringLength READ getMaxStringLength WRITE setMaxStringLength)
Q_PROPERTY(int MotionAllowed READ getMotionAllowed WRITE setMotionAllowed)
Q_PROPERTY(int Font READ getFont WRITE setFont)
Q_PROPERTY(int ColorIndex READ getColorIndex WRITE setColorIndex)
Q_PROPERTY(int Alignment READ getAlignment WRITE setAlignment)
Q_PROPERTY(string LabelString READ getLabelString WRITE setLabelString)
Q_PROPERTY(int RotationAngle READ getRotationAngle WRITE setRotationAngle)
public:
ushort getMaxStringLength();
void setMaxStringLength(ushort maxstringlengt);
uchar getMotionAllowed();
void setMotionAllowed(uchar motionallowed);
uchar getFont();
void setFont(uchar font);
uchar getColorIndex();
void setColorIndex(uchar colorindex);
uchar getAlignment();
void setAlignment(uchar alignment);
string getLabelString();
void setLabelString(string labelstring);
Long getRotationAngle();
void setRotationAngle(Long rotationangle);
private:
ushort MaxStringLength;
uchar MotionAllowed;
uchar Font;
uchar ColorIndex;
uchar Alignment;
Long RotationAngle;
string LabelString;
public:
Tom_Label_Label(QWidget *parent = nullptr);
QGraphicsScene * pScene;
signals:
void testChanged(classB::ONOROFF test);
};
#endif
tom_label.cpp
#include "tom_label.h"
Tom_Label::Tom_Label(QWidget *parent) :
QGraphicsView(parent)
{
_WidgetType = classB::A661_LABEL;
_WidgetIdent = 0;
_ParentIdent = 0;
_Visible= classB::A661_TRUE;
_Anonymous = classB::A661_TRUE;
_StyleSet = 0;
_PosX = 0;
_PosY = 0;
_SizeX = 70;
_SizeY = 20;
MaxStringLength = 80;
MotionAllowed = 1;
Font = 1;
ColorIndex = 1;
Alignment = 1;
RotationAngle = 0;
LabelString = "A661_label";
pScene = new QGraphicsScene(this);
pScene->addText(LabelString);
this->setScene(pScene);
this->setStyleSheet("background:transparent;border:0px");
this->rotate(0);
this->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
this->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
this->setGeometry(this->getPosX(),this->getPosY(),static_cast<int>(this->getSizeX()),static_cast<int>(this->getSizeY()));
}
ushort Tom_Label::getMaxStringLength()
{
return this->MaxStringLength;
}
void Tom_Label::setMaxStringLength(ushort maxstringlengt)
{
this->MaxStringLength = maxstringlengt;
update();
}
uchar Tom_Label::getMotionAllowed()
{
return this->MotionAllowed;
}
void Tom_Label::setMotionAllowed(uchar motionallowed)
{
this->MotionAllowed = motionallowed;
update();
}
uchar Tom_Label::getFont()
{
return this->Font;
}
void Tom_Label::setFont(uchar font)
{
this->Font = font;
update();
}
uchar Tom_Label::getColorIndex()
{
return this->ColorIndex;
}
void Tom_Label::setColorIndex(uchar colorindex)
{
this->ColorIndex = colorindex;
update();
}
uchar Tom_Label::getAlignment()
{
return this->Alignment;
}
void Tom_Label::setAlignment(uchar alignment)
{
this->Alignment = alignment;
update();
}
string Tom_Label::getLabelString()
{
return this->LabelString;
}
void Tom_Label::setLabelString(string labelstring)
{
this->LabelString = labelstring;
pScene->clear();
pScene->addText(labelstring);
update();
}
Long Tom_Label::getRotationAngle()
{
return this->RotationAngle;
}
void Tom_Label::setRotationAngle(Long rotationangle)
{
this->RotationAngle = rotationangle;
pScene->clear();
pScene->addText(this->LabelString);
this->rotate(rotationangle);
update();
}