关闭

Qt简单坐标绘制

标签: 坐标系qpainter位置
1755人阅读 评论(1) 收藏 举报
分类:

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:13064次
    • 积分:489
    • 等级:
    • 排名:千里之外
    • 原创:35篇
    • 转载:1篇
    • 译文:1篇
    • 评论:1条
    文章分类
    最新评论