https://blog.csdn.net/xialianggang1314/article/details/81328577
关于Qt下绘制按钮的文章不少,这里简单介绍一个怎么绘制圆形⭕️的按钮并在点击时候改变颜色的方法。先上图,如下:
==》1 圆形按钮初始状态(未被点击且鼠标未移动到按钮上)
==》2 当鼠标移动到按钮上时的状态
==》3、点击圆形按钮时的状态
其他的不多说了,直接上代码吧,具体细节请代码中的注释信息:
-
#ifndef MAINWINDOW_H
-
#define MAINWINDOW_H
-
#include <QMainWindow>
-
#include"QPainter"
-
class QPainter;
-
class QMouseEvent;
-
class QRectF;
-
class MainWindow :
public QMainWindow
-
{
-
Q_OBJECT
-
public:
-
MainWindow(QWidget *parent =
0);
-
~MainWindow();
-
signals:
-
void cursorchanged(QPaintEvent *event);
-
public:
-
void paintEvent(QPaintEvent *);
//绘图
-
void mousePressEvent(QMouseEvent *event);
-
void mouseReleaseEvent(QMouseEvent* event);
-
void mouseMoveEvent(QMouseEvent *);
//鼠标移动事件==》可以用于做触摸式的动作
-
public:
-
QPaintEvent *m_paintevent;
-
QPainter painter;
-
int m_pressflag;
//判断按钮是否被点击
-
int m_touchflag;
//鼠标滑动到按钮上
-
QRectF rectbutton;
//圆形按钮的外接矩形
-
};
-
#endif // MAINWINDOW_H
-
#include "mainwindow.h"
-
#include"QPainter"
-
#include"QMouseEvent"
-
#include"QRectF"
-
#include"QDebug"
-
MainWindow::MainWindow(QWidget *parent)
-
: QMainWindow(parent)
-
{
-
this->setFixedSize(
500,
500);
//设置父窗口的大小
-
m_pressflag =
false;
-
m_touchflag =
false;
-
rectbutton = QRectF(
20,
20,
50,
50);
-
setMouseTracking(
true);
//设置鼠标可跟踪
-
connect(
this,SIGNAL(cursorchanged(QPaintEvent* )),
this,SLOT(paintEvent(QPaintEvent*)));
-
}
-
MainWindow::~MainWindow()
-
{
-
}
-
//绘图事件
-
void MainWindow::paintEvent(QPaintEvent *)
-
{
-
painter.begin(
this);
-
painter.setPen(QPen(Qt::blue,
4));
//设置画笔形式
-
if(!m_pressflag && !m_touchflag){
-
painter.drawEllipse(rectbutton);
//画圆形状按钮==>矩形的内切圆
-
}
-
else
if(m_pressflag)
-
{
-
painter.setBrush(Qt::red);
-
}
-
else
if (!m_pressflag && m_touchflag)
-
{
-
//painter.begin(this);
-
painter.setBrush(Qt::black);
-
}
-
painter.drawEllipse(rectbutton);
-
painter.end();
-
update();
-
}
-
//鼠标点击事件
-
void MainWindow::mousePressEvent(QMouseEvent *event)
-
{
-
if(rectbutton.contains(event->pos())){
-
qDebug()<<
"buttton was clicked!";
-
m_pressflag = !m_pressflag;
-
}
-
}
-
//鼠标释放事件
-
void MainWindow::mouseReleaseEvent(QMouseEvent* event)
-
{
-
}
-
//鼠标移动事件
-
void MainWindow::mouseMoveEvent(QMouseEvent *event)
-
{
//鼠标移动事件==》可以用于做触摸式的动作
-
QPoint n = event->pos();
-
qDebug()<<n;
//鼠标移动位置
-
if(rectbutton.contains(n))
-
{
-
qDebug()<<
"button was touched";
-
m_touchflag =
true;
-
}
-
else
-
{
-
m_touchflag =
false;
-
}
-
emit cursorchanged(m_paintevent);
//这个地方的信号函数的用法新手请注意,老司机请忽略
-
qDebug()<<
"signal was emitted";
-
}