画板
通过按钮以及捕获鼠标的press与move信号,利用pixmap在窗口中完成画版上作画、擦除、换色功能。
代码示例:
.h文件
#ifndef MHUATU_H
#define MHUATU_H
#include <QMainWindow>
#include <QPixmap>
#include <QMouseEvent>
#include <QPainter>
#include <QPaintEvent>
#include <QDebug>
#include <QPushButton>
#include <QColor>
#include <QColorDialog>
class mhuatu : public QMainWindow
{
Q_OBJECT
QPixmap *mypix;
QPoint startpoint;
public:
mhuatu(QWidget *parent = nullptr);
~mhuatu();
void mousePressEvent(QMouseEvent *e);
void mouseMoveEvent(QMouseEvent * e);
void paintEvent(QPaintEvent *);
QPushButton *btn1;
void setcolor();
QPen pen;
};
#endif // MHUATU_H
.cpp文件:
#include "mhuatu.h"
mhuatu::mhuatu(QWidget *parent)
: QMainWindow(parent)
{
//设置画板尺寸
this->setFixedSize(1024,768);
mypix = new QPixmap(this->size());
mypix->fill(Qt::white); // 自定义绘制板填充为白色
this->setWindowTitle("画图");
btn1 = new QPushButton();
btn1->setParent(this);
btn1->resize(75,30);
btn1->move(width()-75, 0);
btn1->setText("颜色");
btn1->setIcon(QIcon(":/icon/color.png")); //通过添加的资源文件设置按钮图标
connect(btn1, &QPushButton::clicked, this, &mhuatu::setcolor);
pen.setColor(Qt::green);
}
mhuatu::~mhuatu()
{
}
void mhuatu::mousePressEvent(QMouseEvent *e)
{
if(e->button()==Qt::RightButton)
{
pen.setColor(Qt::white); //右键为擦除模式
startpoint = e->pos();
}else if(e->button()==Qt::LeftButton)
{
startpoint = e->pos();
}
}
void mhuatu::mouseMoveEvent(QMouseEvent *e)
{
//申请一个画家类
QPainter painter(mypix);
pen.setWidth(10);
//pen.style();
painter.setPen(pen);
//画线
painter.drawLine(startpoint,e->pos());
startpoint=e->pos();
//实时更新触发绘制事件
update();
}
void mhuatu::setcolor()
{
QColor color = QColorDialog::getColor(Qt::white,this,"颜色");
if(color.isValid())
{
pen.setColor(color); //设置画笔颜色
}
}
void mhuatu::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.drawPixmap(0,0,*mypix);
}
测试结果:
有图可见能通过颜色按钮对画笔的颜色进行切换并能完成正常的作画、擦除功能
简易闹钟
使用Line_Edit输入预计时间完成对时间进行计时,并使用消息框提醒预定时间的预计事件。
代码示例:
.h文件:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTime>
#include <QMouseEvent>
#include <QMessageBox>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
void timerEvent(QTimerEvent *e);
QString atime;
QString aim;
bool flag=true;
private slots:
void on_btn_start_clicked();
void on_btn_stop_clicked();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
.cpp文件:
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::timerEvent(QTimerEvent *e)
{
Q_UNUSED(e);
QTime sys_t = QTime::currentTime();
QString ts = sys_t.toString("hh:mm:ss");
if(ts==atime&&flag)
{
aim=ui->aim_ed->text();
QMessageBox box(QMessageBox::NoIcon, "CLOCK", aim, QMessageBox::Ok);
box.exec();
flag=false;
ui->aim_ed->clear();
ui->time_ed->clear();
}
ui->time_l->setText(ts);
}
void Widget::on_btn_start_clicked()
{
flag=true;
atime=ui->time_ed->text();
startTimer(1000);
}
void Widget::on_btn_stop_clicked()
{
this->close();
}
测试结果:
当时间达到预计时间时跳出弹窗完成下方输入事件的提示