應用QT在winodws下實作應用滑鼠手寫,在界面上顯示字迹的程式。項目示範視訊下載下傳 連結:https://pan.baidu.com/s/1D6-U82s7kT7HF0Evae5JAA
提取碼:u0xd
程式實作的思路為,在工程裡用QPixmap 申請一個像素區域空間,然後擷取滑鼠坐标,應用QPainter改變擷取到的滑鼠坐标位置的像素顔色。涉及到QPainter如何與QPixmap關聯,應用mouseEvent獲位置,以及應用布局管理器實作界面。
頭檔案widget.h内容
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QHBoxLayout>
#include <QLabel>
#include <QPixmap>
#include <QPushButton>
#include <QMouseEvent>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = nullptr);
~Widget();
protected:
void mouseMoveEvent(QMouseEvent *e);
private:
Ui::Widget *ui;
QPixmap impixmap;
QLabel *imagelabel;
QHBoxLayout *hlayout1,*hlayout2;
QVBoxLayout *vlayout;
QPushButton *red,*green,*blue,*clear;
unsigned char colorflag;
private slots:
void on_redbutton_clicked();
void on_greenbutton_clicked();
void on_bluebutton_clicked();
void on_clearbutton_clicked();
};
#endif // WIDGET_H
源碼檔案widget.cpp内容
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QPainter>
#include <QPen>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
imagelabel=new QLabel();
hlayout1=new QHBoxLayout();
hlayout2=new QHBoxLayout();
vlayout=new QVBoxLayout();
red=new QPushButton("Red");
green=new QPushButton("Green");
blue=new QPushButton("Blue");
clear=new QPushButton("clear");
impixmap=QPixmap(640,480);
hlayout1->addWidget(imagelabel);
vlayout->addWidget(red);
vlayout->addWidget(green);
vlayout->addWidget(blue);
vlayout->addWidget(clear);
hlayout2->addLayout(hlayout1);
hlayout2->addLayout(vlayout);
setLayout(hlayout2);
setWindowTitle("HandWrite");
imagelabel->setPixmap(impixmap);
colorflag=0;
connect(red,SIGNAL(clicked()),this,SLOT(on_redbutton_clicked()));
connect(green,SIGNAL(clicked()),this,SLOT(on_greenbutton_clicked()));
connect(blue,SIGNAL(clicked()),this,SLOT(on_bluebutton_clicked()));
connect(clear,SIGNAL(clicked()),this,SLOT(on_clearbutton_clicked()));
}
Widget::~Widget()
{
delete ui;
}
void Widget::mouseMoveEvent(QMouseEvent *e)
{
qDebug("xres=%d,yres=%d",e->pos().x(),e->pos().y());
//change pixmap color by x y
QPainter painter(&impixmap);
QPen pen;
pen.setWidth(4);
if(colorflag==0) pen.setColor(Qt::red);
if(colorflag==1) pen.setColor(Qt::green);
if(colorflag==2) pen.setColor(Qt::blue);
painter.setPen(pen);
painter.drawPoint(e->pos().x(),e->pos().y());
imagelabel->setPixmap(impixmap);
}
void Widget::on_redbutton_clicked()
{
qDebug()<<"Red Clicked1";
colorflag=0;
}
void Widget::on_greenbutton_clicked()
{
qDebug()<<"Green Clicked1";
colorflag=1;
}
void Widget::on_bluebutton_clicked()
{
qDebug()<<"Blue Clicked1";
colorflag=2;
}
void Widget::on_clearbutton_clicked()
{
qDebug()<<"Clear Clicked1";
impixmap.fill(Qt::black);
imagelabel->setPixmap(impixmap);
}