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中画图的函数还有好多了,比如什么椭圆,矩形,直线,扇形,弧等等,上次实现了一下,画椭圆,矩形,和多边形的程序。下次再写。

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