• 6453阅读
  • 3回复

想做一个尺子, 怎样求得不同分辨率下,一厘米的长度呢? [复制链接]

上一主题 下一主题
离线robertkun
 

只看楼主 倒序阅读 楼主  发表于: 2011-06-14
— 本帖被 XChinux 从 Qt网络编程 移动到本区(2011-06-14) —

怎样求得不同分辨率下,一厘米的长度呢? 谢谢!


  1. // 三角形绘制部分。。
  2. void testTriangle::paintEvent( QPaintEvent * event )
  3. {
  4.     QPainter painter(this);
  5.     painter.setRenderHint(QPainter::Antialiasing, true);
  6.     painter.setWindow(-215, -215, 430, 430);
  7.     // 直角三角形
  8.     static const int points1[] =  {-215, -215, -215, +215, 215, 215};
  9.     static const int points2[] = {-145,-65, -145 , +145, +45,+145};
  10.     qDebug("clearMaks  -runned---------");
  11.     QPolygon polygon1;  //该函数画一个由直线相闻的两个以上顶点组成的多边形,用当前画笔画多边形轮廓,用当前画刷和多边形填充模式填充多边形。
  12.     QPolygon polygon2;
  13.     polygon1.setPoints(3, points1);
  14.     polygon2.setPoints(3, points2);
  15.     QRegion region1(polygon1);
  16.     QRegion region2(polygon2);
  17.     QRegion region = region1 - region2;
  18.     QPainterPath path;
  19.     path.addRegion(region);
  20.     // 线性渐变
  21.     QLinearGradient linearGradient(-215, -215, 215, 215);
  22.     linearGradient.setColorAt(0.2, QColor(34, 139, 34, 200));
  23.     linearGradient.setColorAt(0.6, QColor(199,21,133, 150));
  24.     linearGradient.setColorAt(1.0, QColor(255,255,0, 200));
  25.     painter.fillPath(path, QBrush(linearGradient));
  26.     QWidget::paintEvent(event);
  27. }




                                              简单的生活使人快乐!
离线XChinux

只看该作者 1楼 发表于: 2011-06-14
painter.device()->physicalDpiX();
painter.device()>physicalDpiY();

用这两个方法来计算。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线robertkun

只看该作者 2楼 发表于: 2011-06-14
谢谢老大。。

我得出的结果是:
painter.device()->physicalDpiX() =  96
painter.device()->physicalDpiY() =  96
也就是说每英寸,96个像素对吧?

72像素/英寸=28.346像素/厘米
300像素/英寸=118.11像素/厘米
1 厘米=0.3937 英寸
1 英寸=2.54 厘米

然后根据上面的换算得出,像素/1厘米 = 96/2.54 = 37.795275590551181102362204724409

也就是说一厘米37.7个像素,不知道是不是这个意思。
                                              简单的生活使人快乐!
离线robertkun

只看该作者 3楼 发表于: 2011-06-14
引用第1楼XChinux于2011-06-14 11:29发表的  :
painter.device()->physicalDpiX();
painter.device()>physicalDpiY();
用这两个方法来计算。


另外还有一个问题:上面这个函数,在1280*800 的分辨率下是 96,然后切换到800*600的分辨率下,也是 96。
是不是有问题? 谢谢。
                                              简单的生活使人快乐!
快速回复
限100 字节
 
上一个 下一个