Qt編寫自定義控件26-平鋪背景控件

1、前言

平鋪背景控件,主要的應用場景是做爲畫布出現,黑白相間的背景圖,而後上面能夠放置圖片圖形等,使得看起來更美觀,好比PS軟件新建圖層之後的背景,FireWorks軟件新建畫布之後的透明背景,ICO製做軟件新建畫布之後的背景,都會採用一個黑白相間的背景。儘管本人用QPainter不少年,後面在翻閱QPainter自帶的函數中才發現竟然QPainter自帶了這個繪製平鋪背景的函數,擦,他麼叫drawTiledPixmap,Qt不愧是跨平臺GUI開發中的佼佼者,這些東西竟然都考慮到了,說到考慮的周到,Qt中連size和count和length都完美的封裝了,適合不一樣人羣的使用習慣,這個考慮也是很是周到的。drawTiledPixmap就兩個參數,第一個參數是要繪製的區域,第二個參數是要繪製的圖片,圖片不足會自動拷貝填充,因此若是提供的是兩個交替顏色的背景圖片,就會依次繪製造成平鋪背景的效果,爲了使得顏色能夠控制,本控件增長了交替顏色的設置,能夠自行傳入兩種顏色做爲交替顏色,在程序內部自動生成要繪製的圖片。linux

2、實現的功能

  • 1:可設置交替背景顏色

3、效果圖

4、頭文件代碼

#ifndef TILEDBG_H
#define TILEDBG_H

/**
 * 平鋪背景控件 做者:feiyangqingyun(QQ:517216493) 2018-8-25
 * 1:可設置交替背景顏色
 */

#include <QWidget>

#ifdef quc
#if (QT_VERSION < QT_VERSION_CHECK(5,7,0))
#include <QtDesigner/QDesignerExportWidget>
#else
#include <QtUiPlugin/QDesignerExportWidget>
#endif

class QDESIGNER_WIDGET_EXPORT TiledBg : public QWidget
#else
class TiledBg : public QWidget
#endif

{
    Q_OBJECT
    Q_PROPERTY(QColor color1 READ getColor1 WRITE setColor1)
    Q_PROPERTY(QColor color2 READ getColor2 WRITE setColor2)
    Q_PROPERTY(QPixmap bgPix READ getBgPix WRITE setBgPix)

public:
    explicit TiledBg(QWidget *parent = 0);

protected:
    void drawBg();
    void paintEvent(QPaintEvent *);

private:
    QColor color1;              //顏色1
    QColor color2;              //顏色2
    QPixmap bgPix;              //背景圖片

public:
    QColor getColor1()          const;
    QColor getColor2()          const;
    QPixmap getBgPix()          const;

    QSize sizeHint()            const;
    QSize minimumSizeHint()     const;

public slots:
    //設置顏色1
    void setColor1(const QColor &color1);
    //設置顏色2
    void setColor2(const QColor &color2);
    //設置背景圖片
    void setBgPix(const QPixmap &bgPix);
};

#endif // TILEDBG_H

5、核心代碼

#pragma execution_character_set("utf-8")

#include "tiledbg.h"
#include "qpainter.h"
#include "qdebug.h"

TiledBg::TiledBg(QWidget *parent) : QWidget(parent)
{
    color1 = QColor(255, 255, 255);
    color2 = QColor(220, 220, 220);
    bgPix = QPixmap(64, 64);
    drawBg();
}

void TiledBg::drawBg()
{
    bgPix.fill(color1);
    QPainter painter(&bgPix);
    painter.fillRect(0, 0, 32, 32, color2);
    painter.fillRect(32, 32, 32, 32, color2);
    painter.end();
    update();
}

void TiledBg::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.drawTiledPixmap(this->rect(), bgPix);
}

QColor TiledBg::getColor1() const
{
    return this->color1;
}

QColor TiledBg::getColor2() const
{
    return this->color2;
}

QPixmap TiledBg::getBgPix() const
{
    return this->bgPix;
}

QSize TiledBg::sizeHint() const
{
    return QSize(100,100);
}

QSize TiledBg::minimumSizeHint() const
{
    return QSize(20,20);
}

void TiledBg::setColor1(const QColor &color1)
{
    if (this->color1 != color1) {
        this->color1 = color1;
        drawBg();
    }
}

void TiledBg::setColor2(const QColor &color2)
{
    if (this->color2 != color2) {
        this->color2 = color2;
        drawBg();
    }
}

void TiledBg::setBgPix(const QPixmap &bgPix)
{
    this->bgPix = bgPix;
    update();
}

6、控件介紹

  1. 超過149個精美控件,涵蓋了各類儀表盤、進度條、進度球、指南針、曲線圖、標尺、溫度計、導航條、導航欄,flatui、高亮按鈕、滑動選擇器、農曆等。遠超qwt集成的控件數量。
  2. 每一個類均可以獨立成一個單獨的控件,零耦合,每一個控件一個頭文件和一個實現文件,不依賴其餘文件,方便單個控件以源碼形式集成到項目中,較少代碼量。qwt的控件類環環相扣,高度耦合,想要使用其中一個控件,必須包含全部的代碼。
  3. 所有純Qt編寫,QWidget+QPainter繪製,支持Qt4.6到Qt5.12的任何Qt版本,支持mingw、msvc、gcc等編譯器,支持任意操做系統好比windows+linux+mac+嵌入式linux等,不亂碼,可直接集成到Qt Creator中,和自帶的控件同樣使用,大部分效果只要設置幾個屬性便可,極爲方便。
  4. 每一個控件都有一個對應的單獨的包含該控件源碼的DEMO,方便參考使用。同時還提供一個全部控件使用的集成的DEMO。
  5. 每一個控件的源代碼都有詳細中文註釋,都按照統一設計規範編寫,方便學習自定義控件的編寫。
  6. 每一個控件默認配色和demo對應的配色都很是精美。
  7. 超過130個可見控件,6個不可見控件。
  8. 部分控件提供多種樣式風格選擇,多種指示器樣式選擇。
  9. 全部控件自適應窗體拉伸變化。
  10. 集成自定義控件屬性設計器,支持拖曳設計,所見即所得,支持導入導出xml格式。
  11. 自帶activex控件demo,全部控件能夠直接運行在ie瀏覽器中。
  12. 集成fontawesome圖形字體+阿里巴巴iconfont收藏的幾百個圖形字體,享受圖形字體帶來的樂趣。
  13. 全部控件最後生成一個dll動態庫文件,能夠直接集成到qtcreator中拖曳設計使用。
  14. 目前已經有qml版本,後期會考慮出pyqt版本,若是用戶需求量很大的話。

7、SDK下載

  • SDK下載連接:https://pan.baidu.com/s/1A5Gd77kExm8Co5ckT51vvQ 提取碼:877p
  • 下載連接中包含了各個版本的動態庫文件,全部控件的頭文件,使用demo,自定義控件+屬性設計器。
  • 自定義控件插件開放動態庫dll使用(永久免費),無任何後門和限制,請放心使用。
  • 目前已提供26個版本的dll,其中包括了qt5.12.3 msvc2017 32+64 mingw 32+64 的。
  • 不按期增長控件和完善控件,不按期更新SDK,歡迎各位提出建議,謝謝!
  • widget版本(QQ:517216493)qml版本(QQ:373955953)三峯駝(QQ:278969898)。
  • 濤哥的知乎專欄 Qt進階之路 https://zhuanlan.zhihu.com/TaoQt
  • 歡迎關注微信公衆號【高效程序員】,C++/Python、學習方法、寫做技巧、熱門技術、職場發展等內容,乾貨多多,福利多多!
相關文章
相關標籤/搜索