//实现自己绘制图形 3.22
#include "MyWidget.h"
#include <QApplication>
#include <QPainter>
#include <QPixmap>
#include <QMoveEvent>
#include <QDebug>
MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
{
button = new MyButton("mybutton!",this);
connect(button,SIGNAL(clicked()),this,SLOT(slotButtonClicked()));
}
void MyWidget::slotButtonClicked()
{
qDebug() << "button is clicked!";
}
void MyWidget::paintEvent(QPaintEvent *event)
{
QPainter p(this);
for(int i=0;i<_lines.size();i++)
{
const QVector<QPoint>& line = _lines.at(i); //需要绘制哪条线
for(int j=0;j<line.size()-1;j++) //这里<的是size()-1
{
p.drawLine(line.at(j),line.at(j+1));
}
}
// for(int i = 0; i < this->_line.size() -1; i++)
// {
// p.drawLine(_line.at(i),_line.at(i+1));
// }
}
void MyWidget::mouseMoveEvent(QMouseEvent *event)
{
// //不能在这里面创建QPainter对象
// _line.append(event->pos());
// update(); //一定要重绘
if(_lines.size() ==0)
{
QVector<QPoint> line;
_lines.append(line);
}
QVector<QPoint>& lastline = _lines.last();
lastline.append(event->pos());
update();
}
void MyWidget::mousePressEvent(QMouseEvent *event)
{
QVector<QPoint> line;
_lines.append(line); //添加一条线
QVector<QPoint>& lastline = _lines.last();
lastline.append(event->pos());
// _line.append(event->pos()); //将点保存到容器里面
// //update();
}
void MyWidget::mouseReleaseEvent(QMouseEvent *event)
{
// _line.append(event->pos());
// //update();
QVector<QPoint>& lastline = _lines.last();
lastline.append(event->pos());
}
int main(int argc,char* argv[])
{
QApplication app(argc,argv);
MyWidget w;
w.show();
return app.exec();
}