【问题标题】:QPrinter rounds pagesize if it is close to the standard page sizes (A3, A4 ...)如果页面大小接近标准页面大小(A3、A4 ...),QPrinter 会舍入页面大小
【发布时间】:2018-11-29 08:08:44
【问题描述】:

我想为 PageSize::Custom 保存和恢复 QPrinter::pagesize。 但是当我保存大小时,我读到奇怪的舍入大小:

QPrinter p;
for(int i=0; i<20000; ++i) {
    QSizeF size( qreal(rand()%100000)/100, qreal(rand()%100000)/100 );

    p.setPaperSize( size, QPrinter::Millimeter );

    if( size != p.paperSize(QPrinter::Millimeter) ) 
        qDebug() << size <<  "->" << p.paperSize(QPrinter::Millimeter);
}

QSizeF(216.48, 321.33) -> QSizeF(215.9, 322.3)
QSizeF(250.15, 352.36) -> QSizeF(250, 353)
QSizeF(178.75, 227.77) -> QSizeF(177.8, 228.6) // 178.75 - 177.8 = 0.95 !!!
QSizeF(321.24, 445.22) -> QSizeF(322, 445)
QSizeF(182.6, 258.4) -> QSizeF(182, 257) // 258.4 - 257 = 1.4 !!!
QSizeF(382.17, 279.77) -> QSizeF(381, 279.4)
QSizeF(111.1, 208.13) -> QSizeF(110, 208) // 111.1 - 110 = 1.1 !!!
QSizeF(32.32, 43.67) -> QSizeF(32, 45)
QSizeF(114.07, 163.04) -> QSizeF(114, 162)
QSizeF(228.5, 323.36) -> QSizeF(229, 324)
QSizeF(63.81, 92.1) -> QSizeF(64, 91)

11 个值的四舍五入很糟糕,大约 20000 个值是有效的。

尺寸四舍五入到标准(A0,A4 ......) 如果它的宽度和高度相差小于 ~ 1.2 的任何标准尺寸

如何禁用它?有问题的示例代码:(冻结 210 值)

QDoubleSpinBox sb;
sb.setRange(0.0, 300.0);
sb.setValue(210.0);
sb.show();

QObject::connect(&sb, qOverload<double>(&QDoubleSpinBox::valueChanged),[&sb](double value){
    QPrinter pr;
    pr.setPaperSize( QSizeF(value, 297.0), QPrinter::Millimeter );
    sb.blockSignals(true);
    sb.setValue( pr.paperSize(QPrinter::Millimeter).width() );
    sb.blockSignals(false);
});

【问题讨论】:

  • 我为什么这么问。打开 QtCreator;按打印;设置页面大小:A4;设置页面大小自定义;鼠标滚动不工作的宽度和高度旋转框!因为 209,211 舍入为 210。

标签: qt qprinter


【解决方案1】:

QT5: void setPaperSize(QPrinter::PaperSize newPaperSize)obsolete.

这是一个疯狂的猜测: QT 使用预定义的大小,PaperSize paperSize() 返回“最近”的大小。请参阅this link here,但没有很好地编程 -> 已过时。

【讨论】:

  • 好的。 QtCreator 中的鼠标滚动无法使用宽度和高度旋转框。这是错误还是功能?
  • 最好提出一个新问题,详细说明您所做的工作以及创建旋转框的代码及其周围的一切。但猜测是在您的旋转框上方有另一个小部件,因此它会窃取焦点。
  • 问题不在我的代码中(我做了一个类似的打印机设置小部件)。看看我对这个问题的评论。 QtCreator 也有这个错误或功能。我需要纠正问题还是接受?
  • 我认为 Qt 使用您操作系统中的默认打印对话框。我使用的是 Windows 10,我什至无法更改尺寸。所以我会尝试从记事本++等其他应用程序打印并尝试更改那里的值,如果它仍然失败,我的第一步将是检查系统更新或过时的驱动程序。
  • 在 -options -Designer 下,您可以更改打印预览。尝试另一个。
猜你喜欢
  • 1970-01-01
  • 2015-07-05
  • 2015-02-28
  • 2010-10-10
  • 2015-12-12
  • 2021-04-07
  • 1970-01-01
  • 2011-03-21
相关资源
最近更新 更多