Hor*_*ter 3 qt qtableview qpainter qt5.4
作为动画图像(又名预加载器)或替代品的Qt负载指示器的跟进?我试着在里面画画QTableView.但是当我初始化时,QPainter我收到以下警告.
QWidget::paintEngine: Should no longer be called
QPainter::begin: Paint device returned engine == 0, type: 1
Run Code Online (Sandbox Code Playgroud)
这是代码(SO答案,它似乎有一个按钮):
void CDerivedFromQTableView::paintEvent(QPaintEvent *event)
{
QTableView::paintEvent(event); // draw original content
QPainter p(this); // Problem: QPainter::begin: Paint device returned engine == 0, type: 1
const QPixmap pm(QPixmap::grabWidget(this->m_loadIndicator));
QPoint middle = this->geometry().center();
int x = middle.x() - pm.width() / 2;
int y = middle.y() - pm.height() / 2;
p.drawPixmap(QPoint(x, y), pm); // draw load indicator inside QTableView
}
Run Code Online (Sandbox Code Playgroud)
我很惊讶创造QPainter失败,为什么会这样.我究竟做错了什么?
简化版仍然提供警告
QPainter p(this);
QTableView::paintEvent(event);
return;
Run Code Online (Sandbox Code Playgroud)
当我发表评论时QPainter,警告(当然)消失了,所以它似乎是根本原因,但为什么呢?
作为QTableView子类,QAbstractScrollArea您应该QPainter在其视口上打开:
void CDerivedFromQTableView::paintEvent(QPaintEvent *event)
{
QTableView::paintEvent(event); // draw original content
QPainter p(this->viewport());
p.drawRect(0, 0, 20, 20);
}
Run Code Online (Sandbox Code Playgroud)
文档说:
可以在子类中重新实现此事件处理程序,以接收viewport()窗口小部件的绘制事件(在事件中传递).
注意:如果您打开画家,请确保在视口()上打开它.
| 归档时间: |
|
| 查看次数: |
1338 次 |
| 最近记录: |