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行为:
![](http://blog.51cto.com/images/editer/InBlock.gif)
![](http://blog.51cto.com/images/editer/InBlock.gif)
![](http://blog.51cto.com/images/editer/InBlock.gif)
![](http://blog.51cto.com/images/editer/InBlock.gif)
![](http://blog.51cto.com/images/editer/InBlock.gif)
![](http://blog.51cto.com/images/editer/InBlock.gif)
![](http://blog.51cto.com/images/editer/InBlock.gif)
![](http://blog.51cto.com/images/editer/InBlock.gif)
![](http://blog.51cto.com/images/editer/InBlock.gif)
![](http://blog.51cto.com/images/editer/InBlock.gif)
![](http://blog.51cto.com/images/editer/InBlock.gif)
![](http://blog.51cto.com/images/editer/InBlock.gif)
5.判断lineedit中的内容是否为空:
QString input = ui->lineEidt->text();
if ( input.isEmpty() )
{
//输入为空,警告处理
}
else
{
//查找、更新、修改
}
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);//画线