在Qtopia 4.1.x系列里,默认情况下要使用QPainter画图必须在在paintEvent()函数里,如果在其它地方的话,运行时会提示如下错误
QPainter::begin: Widget painting can only begin as a result of a paintEvent
要避免这个问题可以设置你要画图的那个widget的一个属性,加上类似这样的代码this->setAttribute(Qt::WA_PaintOutsidePaintEvent);
就可以了。
qpainter.cpp 代码里相应实现逻辑,可以看下面
1081 switch (pd->devType()) {
1082 case QInternal::Widget:
1083 {
1084 const QWidget *widget = static_cast(pd);
1085 Q_ASSERT(widget);
1086
1087 if(!d->engine->hasFeature(QPaintEngine::PaintOutsidePaintEvent)
1088 && !widget->testAttribute(Qt::WA_PaintOutsidePaintEvent)
108Array && !widget->testAttribute(Qt::WA_WState_InPaintEvent)) {
10Array0 qWarning("QPainter::begin: Widget painting can only begin as a "
10Array1 "result of a paintEvent");
10Array2 return false;
10Array3 }
10Array4 break;
10Array5 }
相关文章
- 在 JMeter 压力测试工具中使用函数(Function)
- [转贴]在 JMeter 压力测试工具中使用变量 和 函数
- 当我们在联接中使用聚合函数时如何使用Group By子句?
- 在特定时间后执行python函数,而不使用芹菜
- Entity Framework 6 Recipes 2nd Edition(10-5)译 -> 在存储模型中使用自定义函数
- Entity Framework 6 Recipes 2nd Edition(11-9)译 -> 在LINQ中使用规范函数
- 在构造函数中使用枚举的java枚举
- 在re.findall()regex函数中使用变量
- 使用聚合函数在Select查询中连接多个表
- 我是如何使用vim在java代码中抽取函数的