Я узнал одну интересную вещь.Как оказалось, вы можете обновлять виджеты в Qt только из основного потока.Моя функция updated()
была вызвана другим потоком, поэтому this->update()
не работал.Однако все слоты в Qt выполняются только в основном потоке, откуда бы они ни вызывались.В этом случае правильным решением было бы обернуть this->update()
внутри слота.Вот так:
TreeWidget::TreeWidget()
{
/* ... */
connect(this, SIGNAL(signal_update()), this, SLOT(slot_update()));
/* ... */
}
void TreeWidget::updated()
{
/* some actions with cells */
emit signal_update();
}
void TreeWidget::slot_update()
{
this->update();
}
Да, это менее красивое решение, чем this->viewport()->update()
, но более правильное.