mainwindow.h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QAction>
#include <QMouseEvent>
#include <QPainter>
#include <QPixmap>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
void mousePressEvent(QMouseEvent *event){
startp = event->pos();
}
void mouseMoveEvent(QMouseEvent *event){
endp = event->pos();
update();
}
void mouseReleaseEvent(QMouseEvent *event){
save = true;
update();
}
void paintEvent(QPaintEvent *event){
if(save){
QPainter pix(px);
switch(type){
case 1:
pix.drawLine(startp,endp);
break;
case 2:
r = sqrt(pow(endp.y() - startp.y(),2) + pow(endp.x() - startp.x(),2));
pix.drawEllipse(startp,r,r);
break;
case 3:
pix.drawRect(startp.x(),startp.y(),abs(endp.x() - startp.x()),abs(endp.y() - startp.y()));
break;
case 4:
pix.drawPoint(startp);
break;
}
save = false;
}
QPainter p(this);
p.drawPixmap(0,0,*px);
switch(type){
case 1:
p.drawLine(startp,endp);
break;
case 2:
r = sqrt(pow(endp.y() - startp.y(),2) + pow(endp.x() - startp.x(),2));
p.drawEllipse(startp,r,r);
break;
case 3:
p.drawRect(startp.x(),startp.y(),abs(endp.x() - startp.x()),abs(endp.y() - startp.y()));
break;
case 4:
p.drawPoint(startp);
break;
}
}
public slots:
// 画线
void drawline(){
type = 1;
}
// 画圆
void drawcir(){
type = 2;
}
// 画方形
void drawrec(){
type = 3;
}
// 画点
void drawpoint(){
type = 4;
}
// 清空画面
void clearall(){
type = 0;
px->fill();
update();
}
private:
QPoint startp;
QPoint endp;
QPixmap *px;
bool save;
QAction *cir,*rec,*line,*point,*clear;
int type = 0;
// 圆的半径
int r;
};
#endif // MAINWINDOW_H
mainwindow.cpp文件
#include "mainwindow.h"
#include <QToolBar>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
px = new QPixmap(this->width(),this->height());
px->fill();
save = false;
line = new QAction("线");
cir = new QAction("圆");
rec = new QAction("方型");
point = new QAction("点");
clear = new QAction("清除");
QToolBar *linee = addToolBar("线");
linee->addAction(line);
QToolBar *cirr = addToolBar("圆");
cirr->addAction(cir);
QToolBar *recc = addToolBar("方型");
recc->addAction(rec);
QToolBar *pointt = addToolBar("点");
pointt->addAction(point);
QToolBar *clearr = addToolBar("清除");
clearr->addAction(clear);
connect(line,SIGNAL(triggered(bool)),this,SLOT(drawline()));
connect(cir,SIGNAL(triggered(bool)),this,SLOT(drawcir()));
connect(rec,SIGNAL(triggered(bool)),this,SLOT(drawrec()));
connect(point,SIGNAL(triggered(bool)),this,SLOT(drawpoint()));
connect(clear,SIGNAL(triggered(bool)),this,SLOT(clearall()));
}
MainWindow::~MainWindow()
{
}
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
简单的实现了画线、圆、长方形与点,还有清除的功能。