使用三张图片显示向导页
Dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
namespace Ui {
class Dialog;
}
class QPushButton;
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
protected:
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void paintEvent(QPaintEvent *);
private:
Ui::Dialog *ui;
QList<QPixmap> m_imgs;
QList<QRect> m_rects;
int m_index;
bool m_mousePressed;
QPoint m_movePoint;
};
#endif // DIALOG_H
Dialog.cpp
#include "dialog.h"
#include "ui_dialog.h"
#include <QtWidgets>
#include <QPainter>
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog),
m_index(0)
{
ui->setupUi(this);
setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::Dialog);
QPixmap img1(":/img1");
QPixmap img2(":/img2");
QPixmap img3(":/img3");
this->setFixedSize(img1.size());
m_imgs.push_back(img1);
m_imgs.push_back(img2);
m_imgs.push_back(img3);
m_rects.push_back(QRect(this->width() - 100, this->height() - 46, 60, 25));
m_rects.push_back(QRect(this->width() - 100, this->height() - 46, 60, 25));
m_rects.push_back(QRect(this->width() - 110, this->height() - 46, 80, 25));
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::mousePressEvent(QMouseEvent *event)
{
if(event->button() == Qt::LeftButton) {
m_mousePressed = true;
}
m_movePoint = event->globalPos() - pos();
}
void Dialog::mouseReleaseEvent(QMouseEvent *event)
{
m_mousePressed = false;
if (m_rects[m_index].contains(event->pos())) {
int index = m_index;
++index;
if (index == m_imgs.size()) {
qDebug() << "show main";
} else {
m_index = index;
update();
}
}
}
void Dialog::mouseMoveEvent(QMouseEvent *event)
{
if(m_mousePressed) {
QPoint move_pos = event->globalPos();
move(move_pos - m_movePoint);
}
}
void Dialog::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.drawPixmap(0, 0, m_imgs[m_index]);
}
封装后:
#ifndef GUIDEPAGE_H
#define GUIDEPAGE_H
#include <QWidget>
class QPushButton;
class GuidePage : public QWidget
{
Q_OBJECT
public:
explicit GuidePage(const QList<QPixmap> &imgs, QWidget *parent = 0);
signals:
void sigFinish();
public slots:
void showIndex(int index);
protected:
void showEvent(QShowEvent *event);
void mousePressEvent(QMouseEvent *event);
void paintEvent(QPaintEvent *);
private:
QList<QPixmap> m_imgs;
QList<QRect> m_circleRects;
int m_index;
QPushButton *m_btnTurnPage;
};
#endif // GUIDEPAGE_H
#include "guidepage.h"
#include <QtWidgets>
#include <assert.h>
GuidePage::GuidePage(const QList<QPixmap> &imgs, QWidget *parent) :
QWidget(parent), m_imgs(imgs), m_index(0)
{
assert(m_imgs.size() > 0);
this->setFixedSize(m_imgs[0].size());
int radius = 11;
int space = 5;
int circleWidth = m_imgs.size() * radius + (m_imgs.size() - 1) * space;
int beginX = (this->width() - circleWidth) / 2;
int y = this->height() - 50;
for (int i=0; i<m_imgs.size(); i++) {
int x = beginX + (i * radius + i * space);
m_circleRects.push_back(QRect(x, y, radius, radius));
}
assert(m_imgs.size() == m_circleRects.size());
m_btnTurnPage = new QPushButton("Next", this);
connect(m_btnTurnPage, &QPushButton::clicked, [this] {
int index = m_index;
showIndex(++index);
});
m_btnTurnPage->setStyleSheet("QPushButton{background:transparent;color:#00ff00}");
}
void GuidePage::showIndex(int index)
{
if (index >= m_imgs.size()) {
emit sigFinish();
} else {
if (index == m_imgs.size() - 1) {
m_btnTurnPage->setText("Enter");
} else {
m_btnTurnPage->setText("Next");
}
m_index = index;
update();
}
}
void GuidePage::showEvent(QShowEvent *)
{
m_btnTurnPage->setGeometry(this->width() - 110, this->height() - 50,
m_btnTurnPage->width(), m_btnTurnPage->height());
}
void GuidePage::mousePressEvent(QMouseEvent *event)
{
for (int i=0; i<m_circleRects.size(); i++) {
if (m_circleRects[i].contains(event->pos())) {
if (m_index != i) {
showIndex(i);
break;
}
}
}
}
void GuidePage::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.drawPixmap(0, 0, m_imgs[m_index]);
painter.setPen(Qt::NoPen);
painter.setRenderHint(QPainter::Antialiasing, true);
for (int i=0; i<m_circleRects.size(); i++) {
painter.setBrush(i == m_index ? QColor(30, 210, 213) : QColor(89, 89, 89));
painter.drawEllipse(m_circleRects[i]);
}
}