qt中drawline函数的参数_c++ - Qt-drawPolyline和drawLine之间的区别 - 堆栈内存溢出
我做了一个MCVE来解决这个问题。
因此,我使用的缩放比例小得多,无法重现该问题。 然后,我使用了OP所述的缩放比例1.0E14。 突然,线条图消失了。 降低缩放比例,我1E12说(以我1E12 )直到1E12效果很好,但缩放比例更高的线条开始消失。 玩弄这个时,一位同事走了,并暗示这可能只是浮点问题。 我们简短地讨论了这一点,并得出结论:
用非常大的数字乘以非常小的数字根本不是问题。 它由(整数)乘以尾数并加上指数组成。
大数与小数的加/减是一个问题,因为两个数必须使用相等的指数(通过移位尾数)进行加/减尾数。
因此,可能会发生后者,从而将非0值擦除为0。
10 14是二进制的47位数字。 这接近于53位尾数的double精度。 但是 :使用的QPainter渲染引擎可能基于OpenGL,其中float是很多东西的默认设置。 float仅提供尾数的23位!
因此,在对此进行了思考之后,我找到了不使用比例尺10 14进行绘制的充分理由。
为了证明这一点,我做了一个小样本testQPainterDrawLine.cc :
#include
class Widget: public QWidget {
public:
const double scale;
public:
Widget(double scale, QWidget *pQParent = nullptr):
QWidget(pQParent),
scale(scale)
{ }
virtual ~Widget() = default;
Widget(const Widget&) = delete;
Widget& operator=(const Widget&) = delete;
protected:
virtual void paintEvent(QPaintEvent *pQEvent) override;
};
void Widget::paintEvent(QPaintEvent*)
{
const double value = height() / scale;
QPainter qPainter(this);
qPainter.fillRect(0, 0, width(), height(), QColor(Qt::white));
qPainter.drawRect(0, 0, width() - 1, height() - 1);
QTransform xform;
xform.scale(1, scale);
qPainter.setTransform(xform);
qPainter.setPen(QPen(QColor(Qt::red), 3.0));
const double xL = 0.333 * width();
qPainter.drawLine(QPointF(xL, 0.0), QPointF(xL, value));
qPainter.setPen(QPen(QColor(Qt::blue), 3.0));
const double xPL = 0.667 * width();
QPointF qPts[] = { QPointF(xPL, 0.0), QPointF(xPL, value) };
const int nPts = sizeof qPts / sizeof *qPts;
qPainter.drawPolyline(qPts, nPts);
}
int main(int argc, char **argv)
{
qDebug() << "Qt Version:" << QT_VERSION_STR;
QApplication app(argc, argv);
QWidget qWin;
QGridLayout qGrid;
qGrid.setRowStretch(0, 0); qGrid.setRowStretch(1, 1);
double scale = 1.0E11;
for (int i = 0; i < 4; ++i, scale *= 10.0) {
qGrid.addWidget(
new QLabel(QString("Scale: %1").arg(scale)),
0, i);
qGrid.addWidget(new Widget(scale), 1, i);
}
qWin.setLayout(&qGrid);
qWin.resize(1024, 256);
qWin.show();
return app.exec();
}
testQPainterDrawLine.pro :
SOURCES = testQPainterDrawLine.cc
QT = widgets
$ qmake-qt5 testQPainterDrawLine.pro
$ make
$ ./testQPainterDrawLine
Qt Version: 5.9.4
所以,最后,我相信,这与QPainter::drawLine()与QPainter::drawPolyline()无关。 仅仅是缩放比例过高而导致浮点问题。 这就是线条可能意外出现的原因。
解决的办法是简单:值与拉伸之前被缩放QPainter ,以便在内部变换QPainter在量值接近于0和1发生。
qt中drawline函数的参数_c++ - Qt-drawPolyline和drawLine之间的区别 - 堆栈内存溢出相关推荐
- c语言sort函数排序二维数组,c++ - 如何使用stl sort函数根据第二列对二维数组进行排序? - 堆栈内存溢出...
stl排序要求迭代器的rvalue作为参数传递. 如果你想使用sort函数,你必须在c ++ 11中编译并使用数组stl来存储数组. 代码如下 #include "bits/stdc++.h ...
- mysql中创建视图语法错误_mysql - 使用过程MySQL创建视图时出错 - 堆栈内存溢出
尝试使用过程创建视图时出现问题. 我必须这样做,因为我需要在MySQL中发挥作用,将表的行转换为另一个表的列. 该查询效果很好,但是当我将其放在" CREATE VIEW"语句中时 ...
- cef使用缓存_c# - CefSharp清除缓存路径崩溃应用程序 - 堆栈内存溢出
我正在使用以下代码在Winform应用程序中创建CefSharp浏览器: ChromiumWebBrowser browser = new ChromiumWebBrowser("" ...
- c2054未定义基类_c++ - 错误C2504:基类未定义 - 堆栈内存溢出
我之前多次遇到过这个错误并最终找到了解决方案,但是这个让我难过. 我有一个由'Player'继承的类'Mob'. 这是Mob.h: #pragma once #include "PlaySt ...
- android和flask交互,java - 当我从Android向Flask Web服务发送参数时,如何解决“ SSL库故障”? - 堆栈内存溢出...
我确实尝试将一些值作为" application / json "从Android应用程序发送到Flask Web服务. 这是我的Java代码 : Thread thread = ...
- html 弹框字体模糊,html - Chrome中的字体太模糊了 - 我该如何解决这个问题? - 堆栈内存溢出...
我不认为这与所选字体有任何关系,尽管可能存在没有出现此错误的字体. 简而言之,问题的根源在于您为了获得十六进制形状而倾斜和平移两次. 从特定的技术角度来看,我认为只有熟悉Chrome渲染引擎工作原理的 ...
- QT中main函数中加载外部字体:OTF
QT中main函数中加载外部字体:OTF 我们开发的程序中,如果想使用外部下载的开源字体,同时保证在软件发布时,程序字体能保证和开发者环境下一致,且不想通过安装字体方式实现字体跟随软件时,我们需要在代 ...
- linux中probe函数传递参数的寻找(下)
点击打开链接 linux中probe函数传递参数的寻找(下) 通过追寻driver的脚步,我们有了努力的方向:只有找到spi_bus_type的填充device即可,下面该从device去打通,当两个 ...
- MFC开发IM-MFC中Arc函数的参数分别是什么意思
MFC中Arc函数的参数分别是什么意思? 10 pDC->Arc(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4) MFC中Arc ...
- python中size的用法.dim_对于numpy中的函数的参数dim的一点理解
对于numpy中的函数的参数dim的一点理解 经常被dim参数搞混.试着总结了一下.记忆瞬间清晰了 以.max(dim)方法为例: >>> import numpy as np &g ...
最新文章
- python中接口测试垃圾数据如何清理_一个六年经验的python后端是怎么学习用java写API的(2)Extracter,微信文章抓取清洗入库...
- Java Web 之Token+Cookie+Session
- chrome 调试 ios h5
- pycharm创建python虚拟环境好处_PyCharm虚拟环境创建Django2项目一些问题的解决方案...
- 能力不错的大厂高 P,为什么过不了小厂的试用期?
- 通过iOS 9 SFSafariViewController提供完整的Web浏览体验
- floquet端口x极化入射波_hfss和cst电磁媒质色散曲线dispersiondiagram研究方法.pdf
- 【Java 8 新特性】Java Consumer示例
- 使用kubeasz自动化部署K8s
- vbs脚本打开web窗口隐藏地址栏和工具栏
- unity 视频录制总结
- PHP 垃圾回收机制
- html5 龙,百度移动可搜龙点睛 技术创新挺进HTML5元年
- 安卓android记单词软件
- uni-app 实现在做下一个请求时中止当前的请求
- 木马冰河之原理篇(深入浅出看木马)
- python在日常的一些用处
- Tomcat是什么。Tomcat入门介绍
- 光流文件(.flo)转图像
- 从删除到坐牢,这个锅背不动