Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Ивыч от Март 14, 2023, 07:47



Название: QTableWidgetItem и время выполнения setData, setBackground
Отправлено: Ивыч от Март 14, 2023, 07:47
Всем привет! Имею на форме QTableWidget с элементами на нем, типа QTableWidgetItem. Необходимо в определенный момент перекрасить фон строк (по определенному признаку). Имею вот такой цикл:
Код:
	int rows = ui->tableWidget->rowCount();
for ( int i = 0; i < rows; i++ )
{
if ( ui->tableWidget->item(i, 1)->text() == str ) {
for ( int col = 0; col < ui->tableWidget->columnCount(); col++ ) {
ui->tableWidget->item(i, col)->setBackground( QColor(255, 228, 196) );
//ui->tableWidget->item(i, col)->setData( Qt::UserRole, QColor(255, 228, 196) );
}
}
}

Код выполняется крайне медленно. Применение делегата ситуацию не меняет. Если заменить QTableWidgetItem на QLabel скорость выполнения нормальная. Подскажите почему так? Пробовать разбираться в QTableView и QAbstractTableModel (я начинающий разработчик Qt)? или все-таки есть вариант решения? спасибо.

P.S. Закомментировал и все теперь работает быстро:
Код:
ui->tableWidget->verticalHeader()->setSectionResizeMode( QHeaderView::ResizeToContents );


Название: Re: QTableWidgetItem и время выполнения setData, setBackground
Отправлено: kambala от Март 14, 2023, 10:51
как вариант, можно не выбрасывать ResizeToContents, а отключать ресайз перед сменой фона, а после — включать обратно


Название: Re: QTableWidgetItem и время выполнения setData, setBackground
Отправлено: Ивыч от Март 14, 2023, 11:46
как вариант, можно не выбрасывать ResizeToContents, а отключать ресайз перед сменой фона, а после — включать обратно
Да, спасибо, так и сделал.