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