QT绘制线段及规定两点绘出线段的技术要点

1.通过添加QLabel实例显示坐标信息,得知

globalPos(),给出的坐标信息是相对于桌面的,即以桌面左上角为原点。

pos(),是相对于窗口的,以窗口左上角为原点(去除边框)。即pos()给出的是一个相对位置坐标。而globalPos(),给出的是一个绝对坐标。

2.在图片上画线:

QPixmap pix(":/images/1.png");
painter.drawPixmap(0,0,640,480,pix);

3.坐标变换:

绘图设备是指继承QPainterDevice的子类。Qt一共提供了四个这样的类,分别是QPixmap、QBitmap、QImage和QPicture。其中,QPixmap专门为图像在屏幕上的显示做了优化,而QBitmap是QPixmap的一个子类,它的色深限定为1,你可以使用QPixmap的isQBitmap()函数来确定这个QPixmap是不是一个QBitmap。QImage专门为图像的像素级访问做了优化。QPicture则可以记录和重现QPainter的各条命令。

4.获取qpainter行为:

如果我们要记录下QPainter的命令,首先要使用QPainter::begin()函数,将QPicture实例作为参数传递进去,以便告诉系统开始记录,记录完毕后使用QPainter::end()命令终止。代码示例如下:
 
QPicture picture; 
QPainter painter; 
painter.begin(&picture);               // paint in picture 
painter.drawEllipse(10,20, 80,70);  // draw an ellipse 
painter.end();                            // painting done 
picture.save( "drawing.pic");          // save picture
 
如果我们要重现命令,首先要使用QPicture::load()函数进行装载:
 
QPicture picture; 
picture.load( "drawing.pic");           // load picture 
QPainter painter; 
painter.begin(&myImage);             // paint in myImage 
painter.drawPicture(0, 0, picture);  // draw the picture at (0,0) 
painter.end();

5.判断lineedit中的内容是否为空:

QString input = ui->lineEidt->text();
if ( input.isEmpty() )
{
    //输入为空,警告处理
}
else
{
    //查找、更新、修改
}


6.分别获取两次点击的坐标值并自动输入进lineedit:
关键:设置标志位,判断两次点击先后顺序;

 QString edit = ui->label->text();
        QString edit2 = ui->label_2->text();
            QString edit3 = ui->label_3->text();
                QString edit4 = ui->label_4->text();
                int x = m->pos().x();//pos想对于当前活动的窗口
                int y =m->pos().y();

     QPen pen;
     QPainter painter(this);
     painter.setPen(pen);
     painter.drawPoint(x, y);
     if(hasclicked == 0)
      {
          ui->lineEdit_2->setText(tr("%1").arg(x));
          ui->lineEdit_4->setText(tr("%1").arg(y));
          ui->pushButton->setText(tr("(%1,%2)").arg(x).arg(y));
          hasclicked = 1;
      }
else
     {


       ui->lineEdit->setText(tr("%1").arg(x));
       ui->lineEdit_3->setText(tr("%1").arg(y));
        ui->pushButton->setText(tr("(%1,%2)").arg(x).arg(y));

        hasclicked = 0;

7.字符和数字类型的转换:

这个部分是获取lineedit中的值并连线的关键,否则会出现点和线不对应的情况。

  QString wtr=ui->lineEdit->text();
    QString qtr=ui->lineEdit_3->text();
    QString ttr=ui->lineEdit_2->text();
    QString ztr=ui->lineEdit_4->text();


    bool ok;
    int w=wtr.toInt(&ok,10);//转换成10进制
    int q=qtr.toInt(&ok,10);
    int t=ttr.toInt(&ok,10);
    int z=ztr.toInt(&ok,10);


    QPen pen;
    QPainter painter(this);
    painter.setPen(pen);
    painter.drawLine(w,q,t,z);//画线

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

聊聊技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值