1. Preface
Many times you need a control that can replace the container control, automatically accommodate multiple widget s, adjust the width and height, and then provide scrollbar function, which necessarily requires the QScrollArea control, can set the spacing between subpanels, and so on. It is also used in many systems, such as temperature and humidity device panels, with hundreds of temperature and humidity panels.Degree device, which requires a container placement, automatically generates scrollbars, which can set the fixed width and height of the panel or stretch adaptively, is actually set with a table layout + spring. QListWidget provides similar functionality in later studies of Qt built-in controls, so some later scenarios use QListWidget directly.
2. Functions realized
- 1: Caption bar text/height/font/alignment/color can be set
- 2:Settable border width/border rounded angle/border color
- 3:Alarm color switch interval/Alarm darkening color/Alarm normal color can be set
- 4: Text and border colors can be set when enabled and disabled
3. Effect Charts
4. Header File Code
#ifndef PANELFRAME_H #define PANELFRAME_H /** * Author of panel area control: feiyangqingyun(QQ:517216493) 2017-10-21 * 1:Caption bar text/height/font/alignment/color can be set * 2:Settable border width/border rounded angle/border color * 3:Can set alarm color switch interval/alarm darkening color/alarm normal color * 4:Text and border colors can be set when enabled and disabled */ #include <QWidget> class QTimer; #ifdef quc #if (QT_VERSION < QT_VERSION_CHECK(5,7,0)) #include <QtDesigner/QDesignerExportWidget> #else #include <QtUiPlugin/QDesignerExportWidget> #endif class QDESIGNER_WIDGET_EXPORT PanelItem : public QWidget #else class PanelItem : public QWidget #endif { Q_OBJECT Q_ENUMS(Alignment) Q_PROPERTY(int titleHeight READ getTitleHeight WRITE setTitleHeight) Q_PROPERTY(QString titleText READ getTitleText WRITE setTitleText) Q_PROPERTY(QFont titleFont READ getTitleFont WRITE setTitleFont) Q_PROPERTY(Alignment titleAlignment READ getTitleAlignment WRITE setTitleAlignment) Q_PROPERTY(QColor titleColor READ getTitleColor WRITE setTitleColor) Q_PROPERTY(QColor titleDisableColor READ getTitleDisableColor WRITE setTitleDisableColor) Q_PROPERTY(int borderWidth READ getBorderWidth WRITE setBorderWidth) Q_PROPERTY(int borderRadius READ getBorderRadius WRITE setBorderRadius) Q_PROPERTY(QColor borderColor READ getBorderColor WRITE setBorderColor) Q_PROPERTY(QColor borderDisableColor READ getBorderDisableColor WRITE setBorderDisableColor) Q_PROPERTY(int alarmInterval READ getAlarmInterval WRITE setAlarmInterval) Q_PROPERTY(QColor alarmTextColor READ getAlarmTextColor WRITE setAlarmTextColor) Q_PROPERTY(QColor alarmDarkColor READ getAlarmDarkColor WRITE setAlarmDarkColor) Q_PROPERTY(QColor alarmNormalColor READ getAlarmNormalColor WRITE setAlarmNormalColor) Q_PROPERTY(bool isAlarm READ getIsAlarm WRITE setAlarm) Q_PROPERTY(bool isEnable READ getIsEnable WRITE setEnable) public: enum Alignment { Alignment_Left = 0, //Left Alignment Alignment_Center = 1, //Center Alignment Alignment_Right = 2 //Right alignment }; explicit PanelItem(QWidget *parent = 0); ~PanelItem(); protected: void paintEvent(QPaintEvent *); void drawBorder(QPainter *painter); void drawTitle(QPainter *painter); private: int titleHeight; //Title Height QString titleText; //Title Text QFont titleFont; //Title Font Alignment titleAlignment; //Title alignment QColor titleColor; //Title color QColor titleDisableColor; //Disabled Text Color int borderWidth; //Border Width int borderRadius; //Border rounded angle QColor borderColor; //Border color QColor borderDisableColor; //Disabled border color int alarmInterval; //Alarm switch interval QColor alarmTextColor; //Alarm text color QColor alarmDarkColor; //Alarm darker color QColor alarmNormalColor; //Alarm normal color bool isAlarm; //Whether to Alarm bool isEnable; //Is it enabled bool isDark; //Is it deeper QColor tempColor; //Temporary color QTimer *timer; //Alarm switch timer public: int getTitleHeight() const; QString getTitleText() const; QFont getTitleFont() const; Alignment getTitleAlignment() const; QColor getTitleColor() const; QColor getTitleDisableColor() const; int getBorderWidth() const; int getBorderRadius() const; QColor getBorderColor() const; QColor getBorderDisableColor() const; int getAlarmInterval() const; QColor getAlarmTextColor() const; QColor getAlarmDarkColor() const; QColor getAlarmNormalColor() const; bool getIsAlarm() const; bool getIsEnable() const; QSize sizeHint() const; QSize minimumSizeHint() const; private slots: void checkAlarm(); public Q_SLOTS: //Set alarm status void setAlarm(bool alarm); //Set Enabled State void setEnable(bool enable); //Set Title Bar Height void setTitleHeight(int titleHeight); //Set caption text void setTitleText(const QString &titleText); //Set title font void setTitleFont(const QFont &titleFont); //Set title text alignment void setTitleAlignment(const Alignment &titleAlignment); //Set title text color void setTitleColor(const QColor &titleColor); //Set caption text color when disabled void setTitleDisableColor(const QColor &titleDisableColor); //border-width void setBorderWidth(int borderWidth); //Set border rounded angle void setBorderRadius(int borderRadius); //border-color void setBorderColor(const QColor &borderColor); //Set disabled border color void setBorderDisableColor(const QColor &borderDisableColor); //Set alarm switch interval void setAlarmInterval(int alarmInterval); //Set alarm text color void setAlarmTextColor(const QColor &alarmTextColor); //Set alarm darkening color void setAlarmDarkColor(const QColor &alarmDarkColor); //Set alarm normal color void setAlarmNormalColor(const QColor &alarmNormalColor); }; #endif // PANELFRAME_H
5. Core Code
void PanelItem::paintEvent(QPaintEvent *) { //Drawing preparation, anti-aliasing enabled QPainter painter(this); painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing); //bound box drawBorder(&painter); //Draw title drawTitle(&painter); } void PanelItem::drawBorder(QPainter *painter) { if (borderWidth <= 0) { return; } painter->save(); QPen pen; pen.setWidth(borderWidth); pen.setColor(tempColor); painter->setPen(pen); painter->setBrush(Qt::NoBrush); QRect rect(borderWidth / 2, borderWidth / 2, width() - borderWidth, height() - borderWidth); painter->drawRoundedRect(rect, borderRadius, borderRadius); painter->restore(); } void PanelItem::drawTitle(QPainter *painter) { painter->save(); painter->setPen(Qt::NoPen); painter->setBrush(tempColor); int offset = borderWidth - borderWidth / 3; QRect rect(offset, offset, width() - offset * 2, titleHeight); painter->drawRect(rect); //Draw caption text if (isEnable) { painter->setPen(isAlarm ? alarmTextColor : titleColor); } else { painter->setPen(titleDisableColor); } painter->setFont(titleFont); //Text area to recalculate offset = borderWidth * 3; QRect textRect(offset, 0, width() - offset * 2, titleHeight); Qt::Alignment align; if (titleAlignment == Alignment_Left) { align = Qt::AlignLeft | Qt::AlignVCenter; } else if (titleAlignment == Alignment_Center) { align = Qt::AlignHCenter | Qt::AlignVCenter; } else if (titleAlignment == Alignment_Right) { align = Qt::AlignRight | Qt::AlignVCenter; } painter->drawText(textRect, align, titleText); painter->restore(); }
6. Introduction to Controls
- Over 150 beautiful controls, including dashboards, progress bars, progress balls, compasses, curves, rulers, thermometers, navigation bars, navigation bars, flatui, highlight buttons, slide selectors, lunar calendar, etc.Far more than qwt integrated controls.
- Each class can be separated into a single control, with zero coupling, a header file and an implementation file for each control, independent of other files, so that a single control can be integrated into the project as a source code with less code.qwt's control classes are linked and highly coupled. To use one of these controls, you must include all the code.
- All pure Qt writing, QWidget+QPainter drawing, support any Qt version from Qt4.6 to Qt5.12, support compilers such as mingw, msvc, gcc, support any operating system such as windows+linux+mac+embedded linux, no scrambling, can be directly integrated into Qt Creator, like its own controls, most of the effects as long as setA few attributes are very convenient.
- Each control has a corresponding separate DEMO containing its source code for easy reference.It also provides an integrated DEMO used by all controls.
- Each control's source code has detailed Chinese comments, which are written in accordance with the uniform design specifications to facilitate learning how to write custom controls.
- The default and demo colors for each control are beautiful.
- More than 130 visible controls and 6 invisible controls.
- Some controls offer a variety of style choices and indicator style choices.
- All controls adapt to form stretch changes.
- Integrates custom control property designer, supports drag design, what you see is what you get, and supports import and export xml formats.
- With its own activex control demo, all controls can run directly in the ie browser.
- Integrate fontawesome graphics fonts + several hundred graphics fonts from Alibaba iconfont collection to enjoy graphics fonts.
- All controls end up with a dynamic library file (dll or so, etc.) that can be integrated directly into the qtcreator and dragged for design use.
- There is already a qml version, and the pyqt version will be considered later if there is a large user demand.
- Custom Control Plugins open dynamic library for use (permanently free) without any backdoors or restrictions, please use with confidence.
- There are currently 26 versions of dll available, including qt5.12.3 msvc2017 32+64 mingw 32+64.
- Add controls and improve controls at irregular intervals, update SDK at irregular intervals, welcome to make suggestions, thank you!
- Qt introductory books recommend Hoyafei's Quick Start Qt Creator, Getting Started with Qt5 Programming, and Qt advanced books recommend the official C++ GUI Qt4 Programming.
- It is highly recommended that programmers self-cultivate and plan series "Talking Programmers", "Programmers'Growth Class" and "Relieving Programmers", which benefits a lot and benefits for a lifetime!
- SDK Download Link: https://pan.baidu.com/s/1A5Gd77kExm8Co5ckT51vvQ Extraction code: 877p
- The download link includes various versions of dynamic library files, header files for all controls, demo, custom controls + property designer.
- widget version (QQ:517216493) qml version (QQ:373955953) three-camel (QQ:278969898).
- Taoge's Knowledge Column Qt Road to Advancement https://zhuanlan.zhihu.com/TaoQt
- Welcome to the WeChat Public Number, C++/Python, learning methods, writing skills, popular technologies, career development and so on. There are lots of dry goods and benefits!