我是用DirectX的Qt小工具渲染的。我禁用了qt画图引擎
QPaintEngine *paintEngine() const { return NULL; }但有时我想启用qt绘图并禁用directX渲染。我正在禁用DirectX渲染,但是如何启用Qt paintEngine?
发布于 2015-12-12 00:32:42
可能的解决方案包括:
QWindow,然后在raster和DirectX之间切换呈现。QWindow或QWidget,并将可选内容呈现为QImage。您可以将该图像用作纹理,并轻松地将其覆盖到由DirectX呈现的内容上。class MyWidgetPrivate {
public:
bool qtRendering;
// your data members etc.
MyWidgetPrivate(bool qtRendering) :
qtRendering(qtRendering)
{}
};
class MyWidget : public QWidget {
Q_OBJECT
Q_DECLARE_PRIVATE(MyWidget)
QScopedPointer<MyWidgetPrivate> const d_ptr;
QPaintEngine *paintEngine() const {
Q_D(const MyWidget);
return d->qtRendering ? QWidget::paintEngine() : nullptr;
}
MyWidget(QScopedPointer<MyWidgetPrivate> & data, QWidget * parent, bool qtRendering) :
QWidget(parent),
d_ptr(data.take())
{
d_ptr->qtRendering = qtRendering;
}
public:
MyWidget(QWidget * parent, bool qtRendering) :
QWidget(parent),
d_ptr(new MyWidgetPrivate(qtRendering))
{}
void setQtRendering(bool qtRendering) {
if (qtRendering == d_ptr->qtRendering) return;
auto geom = geometry();
auto parent = this->parentWidget();
auto & d = const_cast<QScopedPointer<MyWidgetPrivate>&>(d_ptr);
QScopedPointer<MyWidgetPrivate> pimpl(d.take());
this->~MyWidget(); // destroy in place
new (this) MyWidget(pimpl, parent, qtRendering); // reconstruct in place
setGeometry(geom);
}
};发布于 2016-01-27 00:40:26
使用
QWidget::setAttribute(Qt::WA_OpaquePaintEvent,false);
若要在小工具上重新启用Qt背景绘制,请执行以下操作。
https://stackoverflow.com/questions/34220730
复制相似问题