【问题标题】:Printing complex widgets in Qt在 Qt 中打印复杂的小部件
【发布时间】:2011-03-02 08:01:38
【问题描述】:

我有一个复杂的小部件,其中包含大量不同的子小部件,例如QLabel 的子类。我想打印这个小部件,但显然我不想打印背景,我想打印不同的文本颜色或稍微修改框架的样式。

因为我真的不想使用特殊的“打印”功能遍历所有子小部件,我需要将其附加到所有小部件(如何将“打印”添加到 QLabel?),我想使用paintEvent .

如果我有一个层次结构 MyWidget -> 派生自 -> 一些 QWidget,我想插入一个子层 MyWidget -> MyPrintWidget -> 一些 QWidget,myPrintWidget::paintEvent 将检查当前打印是否将屏幕(因此调用 QWidget::paintEvent),否则如果我们正在打印到打印机,则调用一些函数 MyPrintWidget::drawWidget 代替。

  1. 这是正确的方法吗? 打印启用小部件?
  2. 我怎样才能知道 paintEvent,我正在打印到 打印机而不是屏幕?
  3. 有没有很好的例子 打印复杂的小部件?

【问题讨论】:

    标签: qt printing qt4


    【解决方案1】:
    1. 这是打印启用小部件的正确方法吗?

    QWidget::render() 会将一个小部件及其所有子代呈现给QPaintDeviceQPrinter 就是这样。对于打印,您需要做的就是在打印机设备上调用 render 之前正确设置 widgets stylesheet。如果您正在重复使用屏幕小部件,您应该可以在之后立即将其设置回来。

    1. 如何在paintEvent 中确定我正在打印到打印机而不是屏幕?

    您可能可以通过查看各种 QPaintDevice 属性来弄清楚,但我会尽量避免依赖该功能。

    1. 有打印复杂小部件的好例子吗?

    我不知道有什么可以做你想做的事情。

    【讨论】:

    • 该项目没有使用样式表,所以我需要设置用于打印的调色板并且必须手动进行布局。
    猜你喜欢
    • 1970-01-01
    • 2013-12-21
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多