Russian Qt Forum
Апрель 23, 2024, 12:02 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTableWidgetItem и время выполнения setData, setBackground  (Прочитано 5919 раз)
Ивыч
Новичок

Offline Offline

Сообщений: 2


Просмотр профиля
« : Март 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 );
« Последнее редактирование: Март 14, 2023, 07:58 от Ивыч » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #1 : Март 14, 2023, 10:51 »

как вариант, можно не выбрасывать ResizeToContents, а отключать ресайз перед сменой фона, а после — включать обратно
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Ивыч
Новичок

Offline Offline

Сообщений: 2


Просмотр профиля
« Ответ #2 : Март 14, 2023, 11:46 »

как вариант, можно не выбрасывать ResizeToContents, а отключать ресайз перед сменой фона, а после — включать обратно
Да, спасибо, так и сделал.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.044 секунд. Запросов: 22.