我不太會。大家給點參觀~謝謝謝謝~~~
uj5u.com熱心網友回復:
1. 新建一個空白Qt工程
檔案--> 新建工程或專案-->其它專案-->空的Qt專案
比如命名為Qt_Instance_Example
2. 添加一個C++源檔案
比如命名為main.cpp
添加如下代碼
[html] view plaincopyprint?
01.#include <QApplication>
02.#include <mypainterwidget.h>
03.
04.int main(int argc,char** argv)
05.{
06. QApplication a(argc,argv);
07.
08. MyPainterWidget w(0);
09. w.show();
10. return a.exec();
11.}
#include <QApplication>
#include <mypainterwidget.h>
int main(int argc,char** argv)
{
QApplication a(argc,argv);
MyPainterWidget w(0);
w.show();
return a.exec();
}
這里的MyPainterWidget類是我們自己撰寫的QWidget類的子類,用來實作繪制的視窗部件。
下面我們添加這個類并撰寫其代碼。
3. 添加C++類,命名為MyPainterWidget
.h 檔案如下
[cpp] view plaincopyprint?
01.#ifndef MYPAINTERWIDGET_H
02.#define MYPAINTERWIDGET_H
03.
04.#include <QWidget>
05.#include <QPoint>
06.#include<vector>
07.
08.using namespace std;
09.
10.
11.//線段
12.typedef struct myLine{
13. QPoint startPnt;
14. QPoint endPnt;
15.}myLine;
16.
17.class MyPainterWidget: public QWidget
18.{
19.public:
20. MyPainterWidget(QWidget* parent);
21. ~MyPainterWidget();
22.
23. //繼承
24. void paintEvent(QPaintEvent* p);
25. void mousePressEvent(QMouseEvent *e);
26. void mouseMoveEvent(QMouseEvent *e);
27. void mouseReleaseEvent(QMouseEvent *e);
28.
29. QPoint startPnt; //起點
30. QPoint endPnt; //終點
31. bool isPressed; //滑鼠是否按下
32.
33. vector<myLine*> lines; //存放所有的線段
34.};
35.
36.#endif // MYPAINTERWIDGET_H
#ifndef MYPAINTERWIDGET_H
#define MYPAINTERWIDGET_H
#include <QWidget>
#include <QPoint>
#include<vector>
using namespace std;
//線段
typedef struct myLine{
QPoint startPnt;
QPoint endPnt;
}myLine;
class MyPainterWidget: public QWidget
{
public:
MyPainterWidget(QWidget* parent);
~MyPainterWidget();
//繼承
void paintEvent(QPaintEvent* p);
void mousePressEvent(QMouseEvent *e);
void mouseMoveEvent(QMouseEvent *e);
void mouseReleaseEvent(QMouseEvent *e);
QPoint startPnt; //起點
QPoint endPnt; //終點
bool isPressed; //滑鼠是否按下
vector<myLine*> lines; //存放所有的線段
};
#endif // MYPAINTERWIDGET_H
.cpp 檔案如下
[cpp] view plaincopyprint?
01.#include "mypainterwidget.h"
02.#include <QString>
03.#include <QMessageBox>
04.#include <QPainter>
05.#include <QPen>
06.#include <QMouseEvent>
07.
08.
09.MyPainterWidget::MyPainterWidget(QWidget* parent)
10. :QWidget(parent){
11. setMinimumSize(240,120);
12. setMaximumSize(480,240);
13. this->setMouseTracking(true);
14. this->isPressed = false;
15.}
16.
17.MyPainterWidget::~MyPainterWidget(){
18.
19.}
20.
21.void MyPainterWidget::paintEvent(QPaintEvent*p){
22. QPainter painter(this);
23. QPen pen; //創建一個畫筆
24. pen.setColor(Qt::darkCyan);
25. pen.setWidth(5);
26. painter.setPen(pen);
27.
28. for(int i = 0;i<lines.size();i++){
29. myLine* pLine = lines[i];
30. painter.drawLine(pLine->startPnt,pLine->endPnt);
31. }
32.}
33.
34.void MyPainterWidget::mousePressEvent(QMouseEvent *e){
35. setCursor(Qt::PointingHandCursor);
36. startPnt = e->pos();
37. endPnt = e->pos();
38. this->isPressed = true;
39. //QString msg ="("+QString::number(e->x())+","+QString::number(e->y())+")";
40. //QMessageBox::warning(this,tr("Warning"),msg,QMessageBox::Ok);
41.}
42.
43.void MyPainterWidget::mouseMoveEvent(QMouseEvent *e){
44. if(this->isPressed){
45. endPnt = e->pos();
46.
47. myLine* line = new myLine; //put the new line into vector
48. line->startPnt = startPnt;
49. line->endPnt = endPnt;
50. this->lines.push_back(line);
51.
52. update(); //repainter,call paintEvent
53. startPnt = endPnt;
54. }
55.}
56.
57.void MyPainterWidget::mouseReleaseEvent(QMouseEvent *e){
58. setCursor(Qt::ArrowCursor);
59. this->isPressed = false;
60.}
#include "mypainterwidget.h"
#include <QString>
#include <QMessageBox>
#include <QPainter>
#include <QPen>
#include <QMouseEvent>
MyPainterWidget::MyPainterWidget(QWidget* parent)
:QWidget(parent){
setMinimumSize(240,120);
setMaximumSize(480,240);
this->setMouseTracking(true);
this->isPressed = false;
}
MyPainterWidget::~MyPainterWidget(){
}
void MyPainterWidget::paintEvent(QPaintEvent*p){
QPainter painter(this);
QPen pen; //創建一個畫筆
pen.setColor(Qt::darkCyan);
pen.setWidth(5);
painter.setPen(pen);
for(int i = 0;i<lines.size();i++){
myLine* pLine = lines[i];
painter.drawLine(pLine->startPnt,pLine->endPnt);
}
}
void MyPainterWidget::mousePressEvent(QMouseEvent *e){
setCursor(Qt::PointingHandCursor);
startPnt = e->pos();
endPnt = e->pos();
this->isPressed = true;
//QString msg ="("+QString::number(e->x())+","+QString::number(e->y())+")";
//QMessageBox::warning(this,tr("Warning"),msg,QMessageBox::Ok);
}
void MyPainterWidget::mouseMoveEvent(QMouseEvent *e){
if(this->isPressed){
endPnt = e->pos();
myLine* line = new myLine; //put the new line into vector
line->startPnt = startPnt;
line->endPnt = endPnt;
this->lines.push_back(line);
update(); //repainter,call paintEvent
startPnt = endPnt;
}
}
void MyPainterWidget::mouseReleaseEvent(QMouseEvent *e){
setCursor(Qt::ArrowCursor);
this->isPressed = false;
}
3. 運行結果如下
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/108676.html
標籤:數據庫及相關技術
