1. 程式人生 > 實用技巧 >Qt-透明窗體之異型窗體

Qt-透明窗體之異型窗體

.pro

 1 QT       += core gui
 2 
 3 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
 4 
 5 CONFIG += c++11
 6 
 7 # The following define makes your compiler emit warnings if you use
 8 # any Qt feature that has been marked deprecated (the exact warnings
 9 # depend on your compiler). Please consult the documentation of the
10 # deprecated API in order to know how to port your code away from it. 11 DEFINES += QT_DEPRECATED_WARNINGS 12 13 # You can also make your code fail to compile if it uses deprecated APIs. 14 # In order to do so, uncomment the following line. 15 # You can also select to disable deprecated APIs only up to a certain version of Qt.
16 #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 17 18 SOURCES += \ 19 main.cpp \ 20 windowDesktop.cpp 21 22 HEADERS += \ 23 windowDesktop.h 24 25 FORMS += \ 26 mainwindow.ui 27 28 LIBS += -lUser32 29 30 # Default rules for deployment.
31 qnx: target.path = /tmp/$${TARGET}/bin 32 else: unix:!android: target.path = /opt/$${TARGET}/bin 33 !isEmpty(target.path): INSTALLS += target 34 35 RESOURCES += \ 36 resource.qrc
View Code

main.cpp

 1 #include <windows.h>
 2 #include <winuser.h>
 3 #include <QApplication>
 4 #include "windowDesktop.h"
 5 
 6 int main(int argc, char *argv[])
 7 {
 8     QApplication a(argc, argv);
 9 
10     Dialog w;
11     w.setFixedSize(QSize(800, 400));
12     w.show();
13     return  a.exec();
14 }
View Code

windowDesktop.h

 1 #ifndef WINDOWDESKTOP_H
 2 #define WINDOWDESKTOP_H
 3 
 4 #include "QObject"
 5 #include "QDialog"
 6 #include "QLineEdit"
 7 #include "QPainter"
 8 #include "QWidget"
 9 #include "QBitmap"
10 
11 class  Dialog :  public  QWidget
12 {
13  Q_OBJECT
14 public :
15  Dialog(QWidget *parent = 0);
16  ~Dialog();
17 
18   virtual void paintEvent(QPaintEvent *event);
19 };
20 
21 
22 #endif // WINDOWDESKTOP_H
View Code

windowDesktop.cpp

 1 #include "windowDesktop.h"
 2 
 3 Dialog::Dialog(QWidget *parent)
 4     : QWidget(parent)
 5 {
 6     // 建立個LineEdit用來測試焦點
 7     QLineEdit *le = new QLineEdit(this);
 8     le->setGeometry(300, 150, 100, 30);
 9 
10     this->setAttribute(Qt::WA_TranslucentBackground, true);
11 }
12 
13 Dialog::~Dialog()
14 {
15 }
16 
17 void Dialog::paintEvent(QPaintEvent *event)
18 {
19     QBitmap bitMap(width( ), height( ));
20     //建立一個跟視窗一樣的bitMap
21     QPainter bitMapPainter(&bitMap);
22     bitMapPainter.setPen(Qt::GlobalColor::color0);
23     //先填充
24     bitMapPainter.drawRect(0, 0, width( ), height( ));
25     //下面換成你自己的圖片。
26     QPixmap imageTest(":/new/prefix1/1408266602_762236.png");
27     //然後bitMap就有了你的圖片。
28     bitMapPainter.drawPixmap(0, 0, imageTest.width( ), imageTest.height( ), imageTest);
29     setMask(bitMap);
30 }
View Code