重绘 QTreeWidget

gar*_*art 4 c++ qt qtreewidget qt5

我有一个基于 QTreeWidget 的简单类。在某些情况下(当其中一列的值更新时),我需要重新绘制它。我有一个函数,当我需要更新我的小部件时调用:

void TreeWidget::updated()
{
    /* some actions with cells */

    /* here need to repaint widget */
    this->update();
    /* also I'm tried this->repaint(); */
}
Run Code Online (Sandbox Code Playgroud)

但行this->update();(或this->repaint();) 没有给出任何结果。仅当我单击小部件时才重新绘制它。

那么我该如何重新绘制我的小部件呢?

eyl*_*esc 5

QAbstractScrollArea从as继承的类QTreeWidget具有viewport()必须更新的小部件,因此在您的情况下,解决方案是:

viewport()->update();
Run Code Online (Sandbox Code Playgroud)

如果你想从另一个线程调用更新,你可以使用QMetaObject::invokeMethod()

QMetaObject::invokeMethod(viewport(), "update", Qt::QueuedConnection)
Run Code Online (Sandbox Code Playgroud)