1. 程式人生 > 實用技巧 >QT-Qt圖片按鈕類

QT-Qt圖片按鈕類

main.cpp

 1 #include "mainwindow.h"
 2 
 3 #include <QApplication>
 4 
 5 int main(int argc, char *argv[])
 6 {
 7     QApplication a(argc, argv);
 8     MainWindow w;
 9     w.show();
10     return a.exec();
11 }
View Code

TImageButton.h

 1 #ifndef TIMAGEBUTTON_H
 2 #define TIMAGEBUTTON_H
 3
4 #include <QPushButton> 5 #include <QMouseEvent> 6 #include <QPainter> 7 8 class TImageButton : public QPushButton 9 { 10 Q_OBJECT 11 public: 12 TImageButton(QWidget *parent, QString normal, QString hover, QString lighted); 13 ~TImageButton(); 14 void SetLighted(bool
value); 15 public: 16 void paintEvent(QPaintEvent* pEvent); 17 void mousePressEvent(QMouseEvent *e); 18 void mouseReleaseEvent(QMouseEvent *e); 19 void enterEvent(QEvent *e); 20 void leaveEvent(QEvent *e); 21 protected: 22 bool m_bLighted; 23 bool m_bMouseIN; 24 bool m_bLeftDown;
25 QPixmap m_pHover; 26 QPixmap m_pNormal; 27 QPixmap m_pLighted; 28 QString m_sHover; 29 QString m_sNormal; 30 QString m_sLighted; 31 32 }; 33 34 #endif // TIMAGEBUTTON_H
View Code

TImageButton.cpp

 1 #include "TImageButton.h"
 2 
 3 
 4 TImageButton::TImageButton(QWidget *parent, QString normal, QString hover, QString lighted)
 5     :QPushButton(parent),
 6     m_bMouseIN(false),
 7     m_bLeftDown(false),
 8     m_bLighted(false)
 9 {
10     m_sNormal = normal;
11     m_sHover = hover;
12     m_sLighted = lighted;
13 
14     QImage *image = new QImage;
15     image->load(m_sNormal);
16     m_pNormal = QPixmap::fromImage(*image);
17     QImage *image2 = new QImage;
18     image2->load(m_sHover);
19     m_pHover = QPixmap::fromImage(*image2);
20     QImage *image3 = new QImage;
21     image3->load(m_sLighted);
22     m_pLighted = QPixmap::fromImage(*image3);
23 
24     this->setFixedWidth(m_pNormal.width());
25     this->setFixedHeight(m_pNormal.height());
26 }
27 
28 TImageButton::~TImageButton()
29 {
30 
31 }
32 
33 void TImageButton::SetLighted(bool value)
34 {
35     if(value != m_bLighted)
36     {
37         m_bLighted=value;
38         repaint();
39     }
40 }
41 
42 void TImageButton::paintEvent(QPaintEvent *pEvent)
43 {
44     QPixmap* pPixmap;
45     if(m_bLighted || m_bLeftDown)
46         pPixmap=&m_pLighted;
47     else
48     {
49         if(m_bMouseIN)
50             pPixmap=&m_pHover;
51         else
52             pPixmap=&m_pNormal;
53     }
54     QPainter painter;
55     painter.begin(this);
56     if(pPixmap)
57         painter.drawPixmap(rect(),*pPixmap);
58     if(text().count() > 0)
59         painter.drawText(rect(),Qt::AlignCenter,text());
60     painter.end();
61 }
62 
63 void TImageButton::mousePressEvent(QMouseEvent *e)
64 {
65     if(e->button()==Qt::LeftButton)
66         {
67             m_bLeftDown=true;
68             repaint();
69         }
70     QPushButton::mousePressEvent(e);
71 }
72 
73 void TImageButton::mouseReleaseEvent(QMouseEvent *e)
74 {
75     if(e->button()==Qt::LeftButton)
76     {
77         m_bLeftDown=false;
78         repaint();
79     }
80     QPushButton::mouseReleaseEvent(e);
81 }
82 
83 void TImageButton::enterEvent(QEvent *e)
84 {
85     m_bMouseIN=true;
86     repaint();
87 }
88 
89 void TImageButton::leaveEvent(QEvent *e)
90 {
91     m_bMouseIN=false;
92     repaint();
93 }
View Code

mainwindow.h

 1 #ifndef MAINWINDOW_H
 2 #define MAINWINDOW_H
 3 
 4 #include <QMainWindow>
 5 #include <QHBoxLayout>
 6 #include <QDialog>
 7 
 8 #include "TImageButton.h"
 9 
10 QT_BEGIN_NAMESPACE
11 namespace Ui { class MainWindow; }
12 QT_END_NAMESPACE
13 
14 class MainWindow : public QMainWindow
15 {
16     Q_OBJECT
17 
18 public:
19     MainWindow(QWidget *parent = nullptr);
20     ~MainWindow();
21 
22 private:
23     Ui::MainWindow *ui;
24 
25     QHBoxLayout *m_pHBoxLayout;
26     TImageButton *m_pImageButton;
27 
28 private slots:
29     void on_bu();
30 };
31 #endif // MAINWINDOW_H
View Code

mainwindow.cpp

 1 #include "mainwindow.h"
 2 #include "ui_mainwindow.h"
 3 
 4 MainWindow::MainWindow(QWidget *parent)
 5     : QMainWindow(parent)
 6     , ui(new Ui::MainWindow)
 7 {
 8     ui->setupUi(this);
 9     resize(400, 300);
10     setWindowTitle(QStringLiteral("Qt圖片按鈕類"));
11 
12     m_pHBoxLayout = new QHBoxLayout(this);
13     m_pImageButton = new TImageButton(this, ":/new/prefix1/A.png", ":/new/prefix1/B.png", ":/new/prefix1/C.png");
14     m_pHBoxLayout->addWidget(m_pImageButton);
15     // 設定顯示內容,如果圖片代文字的話就不需要這一行程式碼。
16     m_pImageButton->setText(QString::fromLocal8Bit("123as"));
17     // 設定字型為黑色,如果圖片代文字的話就不需要這一行程式碼。
18     m_pImageButton->setStyleSheet("color: rgb(0, 0, 0);");
19     connect(m_pImageButton, &QPushButton::clicked, this, &MainWindow::on_bu);
20     ui->centralwidget->setLayout(m_pHBoxLayout);
21 }
22 
23 MainWindow::~MainWindow()
24 {
25     delete ui;
26 }
27 
28 void MainWindow::on_bu()
29 {
30     QDialog *odia = new QDialog;
31     QHBoxLayout *ohb = new QHBoxLayout;
32     QPushButton *obu = new QPushButton;
33     obu->setText("OK");
34     ohb->addWidget(obu);
35     odia->setLayout(ohb);
36     odia->show();
37 }
View Code

#ifndefMAINWINDOW_H
#defineMAINWINDOW_H

#include<QMainWindow>
#include<QHBoxLayout>
#include<QDialog>

#include"TImageButton.h"

QT_BEGIN_NAMESPACE
namespaceUi{classMainWindow;}
QT_END_NAMESPACE

classMainWindow:publicQMainWindow
{
Q_OBJECT

public:
MainWindow(QWidget*parent=nullptr);
~MainWindow();

private:
Ui::MainWindow*ui;

QHBoxLayout*m_pHBoxLayout;
TImageButton*m_pImageButton;

privateslots:
voidon_bu();
};
#endif//MAINWINDOW_H