在 Qt 中创建小部件预览

Posted

技术标签:

【中文标题】在 Qt 中创建小部件预览【英文标题】:create widget preview in Qt 【发布时间】:2014-04-17 12:41:45 【问题描述】:

在 Qt 中,是否可以像 Windows7 中的实时任务栏预览一样创建小部件的临时预览(GUI 的快速快照)(当我们将光标放在任务栏中的项目上时,快照窗口会显示在最佳) ? 任何想法

【问题讨论】:

QPixmap::grabWidget 【参考方案1】:

您可以使用 QWidget 方法将小部件渲染到图像中:

void    render(QPaintDevice * target, const QPoint & targetOffset = QPoint(), const QRegion & sourceRegion = QRegion(), RenderFlags renderFlags = RenderFlags( DrawWindowBackground | DrawChildren ))
void    render(QPainter * painter, const QPoint & targetOffset = QPoint(), const QRegion & sourceRegion = QRegion(), RenderFlags renderFlags = RenderFlags( DrawWindowBackground | DrawChildren ))

并使用所需大小的结果 QImage 向用户显示预览。

【讨论】:

【参考方案2】:

作为evilruff has said,可以将小部件渲染到绘画设备或画家中。当然,您要为小部件的额外绘制付出代价。

另一个选项是grab the composited widget's backing store directly as a QImage。在 Qt 5 中,这适用于所有平台,但由 OpenGL 上下文支持的小部件除外。

【讨论】:

以上是关于在 Qt 中创建小部件预览的主要内容,如果未能解决你的问题,请参考以下文章