Qt QTableView paint () событие доставляется неограниченное время, которое потребляет 100% 1 ядра процессора - PullRequest
0 голосов
/ 03 февраля 2019

После обновления с Qt 5.5.1 (Ubuntu 16.04) до Qt 5.9.5 (Ubuntu 18.04) код, который изначально работал нормально (даже на Qt, поставляемом с Ubuntu 14.04), начал использовать 100% 1 ядра процессора - событие рисованиядоставлено на неопределенный срок и не может быть принято:

void OutlinesTableView::paintEvent(QPaintEvent* event)
{
    verticalHeader()->setDefaultSectionSize(fontMetrics().height()*1.5);
    horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);

    this->setColumnWidth(1, this->fontMetrics().averageCharWidth()*12);
    this->setColumnWidth(2, this->fontMetrics().averageCharWidth()*12);

    int normalizedWidth = width()/fontMetrics().averageCharWidth();
    if(normalizedWidth < SIMPLIFIED_VIEW_THRESHOLD_WIDTH) {
        this->setColumnWidth(3, 0);
    } else {
        this->setColumnWidth(3, this->fontMetrics().averageCharWidth()*5);
    }

    QTableView::paintEvent(event);
 }

свыше paintEvent() снова получает то же событие, и его нельзя остановить.Полный список кодов можно найти здесь .

1 Ответ

0 голосов
/ 03 февраля 2019

Первоначально я подозревал, что режим растяжения - если я удалил его, то цикл события рисования исчез, но основная причина:

this->setColumnWidth(3, 0);

Чтобы скрыть столбец, лучше использовать:

this->setColumnHidden(3, true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...