Qt簡單座標繪製

今天試着在Qt中畫一個簡單的座標系。簡單記一下,還有一些問題。
在下面的測試當中,有用到鼠標事件,主要是獲取鼠標的座標位置;用到了QPen,QPainter等。
對於座標的繪製,首先要明白一點,窗體中的座標和平時數學中的座標不是很一樣,它以窗體左上角爲座標原點(0,0),然後水平向右爲X正向,垂直向下爲Y正向。
下圖中重新繪製了一個像平時數學中的一個座標系,把座標原點顯示在左下方,但是沒有轉換。文本框中顯示的還是以窗體左上角爲原點的鼠標位置。
效果如下圖所示:
這裏寫圖片描述
鼠標單擊可以繪製以原點爲起點,以鼠標單擊的位置爲終點的一條射線,兩個文本框顯示了當前鼠標的位置,也可以在文本框中輸入座標值來改變射線的終點位置。
代碼如下所示:

“`

Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{

ui->setupUi(this);

}

Dialog::~Dialog()
{
delete ui;
}
void Dialog::mousePressEvent(QMouseEvent *e)//鼠標單擊
{
int x;
int y;
QPoint p; //座標點
p = e->pos(); //獲取鼠標位置,保存在p中
x = p.x(); //p的x座標值
y = p.y(); //p的y座標值
QString sx,sy; //字符串變量
sx = QString::number(x); //x轉換爲字符串
sy = QString::number(y); //y轉換爲字符串
ui->lineEdit->setText(sx); //文本框顯示 x值
ui->lineEdit_2->setText(sy); //文本框顯示 y值

}
void Dialog::paintEvent(QPaintEvent *)
{
QPainter painter(this);// 畫筆

QPen pen;
pen.setWidth(2); //設置寬度
pen.setBrush(Qt::blue); //設置顏色
painter.setPen(pen); //選中畫筆

painter.drawLine(25,0,25,500);  //繪製y軸
painter.drawLine(25,500,525,500); //繪製x軸
int i;
for(i = 25;i<500;i+=50)//x zhou
{
     painter.drawLine(i+50,500,i+50,490); //繪製x軸上的點
     painter.drawText(5,525-i,QString::number(i-25)); //繪製文本

}
for(i=25;i<500;i+=50)//y zhou
{
     painter.drawLine(25,i+25,35,i+25); //繪製y軸上的點
     painter.drawText(i+50,525,QString::number(i+25)); //繪製文本
}

int x,y;
x = ui->lineEdit->text().toInt();
y = ui->lineEdit_2->text().toInt();
painter.drawLine(25,500,x,y);// 畫射線

Dialog::update();

}

`畫好以後,想讓它像cad中那樣,鼠標單擊兩個不同位置時,在兩點之間畫一條直線,不知道怎麼搞。再想想。
當然了,Qt中畫圖的函數還有好多了,比如什麼橢圓,矩形,直線,扇形,弧等等,上次實現了一下,畫橢圓,矩形,和多邊形的程序。下次再寫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章