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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Глючит скроллинг в QTableWidget. Qt 4.4.1  (Прочитано 6165 раз)
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« : Январь 29, 2009, 23:57 »

Здравствуйте!


Попробовал на днях использовать виджет QTableWidget, сделал логику, наворотил что надо, сегодня доделал до рабочего состояния... Начал играться, и обнаружил, что всё нормально работает, кроме скроллинга. Какие-то глюки при скроллинге вверх-вниз. Что слайдером, что графическими кнопками, что клавиатурой.

В ячейках то появляются, то исчезают строки. Иногда рисуются только верхние или нижние части букв. Если окно свернуть-развернуть, то строки в ячейках все становятся нормально видны. Qt 4.4.1.

Есть ли какой-то метод побороть глюк, не меняя версию Qt? Попробовал делать hide()/show() для виджета QTableWidget, не помогает, строки как были криво отрисованы, так и остаются. Что можно еще сделать?
Записан

Собираю информацию по крупицам
http://webhamster.ru
Dendy
Гость
« Ответ #1 : Январь 30, 2009, 00:33 »

А с отрисовкой вы сами ничего не делали? Механизм рисования содержисого не переопределяли?
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #2 : Январь 30, 2009, 01:33 »

А с отрисовкой вы сами ничего не делали? Механизм рисования содержисого не переопределяли?

Нет. Заполняю строки, вывожу на экран.

Кстати, глюк появляется только если скрыть заголовки столбцов. Если заголовки видны, глюков нет. А у меня каждый сантиметр на счету, содержимое столбцов понятно из контекста, посему заголовки ненужны.

findtableview->horizontalHeader()->hide();

В результате получаю то, что имею.
Записан

Собираю информацию по крупицам
http://webhamster.ru
Dendy
Гость
« Ответ #3 : Январь 30, 2009, 01:51 »

Поподробнее. Что кроется под словами "вывожу на экран"?
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #4 : Январь 30, 2009, 02:21 »

Поподробнее. Что кроется под словами "вывожу на экран"?

Вначале вызов clear_all()

Код:
void findtablewidget::clear_all(void)
{
 // Таблица очищается
 findtableview->setRowCount(0);
 findtableview->setColumnCount(0);
 
  // Устанавливается в таблице две колонки
 findtableview->setColumnCount(2);
}

Потом несколько add_row() и все.

Код:
void findtablewidget::add_row(QString title, QString tags)
{
 int i=findtableview->rowCount();

 findtableview->insertRow(i);

 QTableWidgetItem *item_title=new QTableWidgetItem(title);
 QTableWidgetItem *item_info=new QTableWidgetItem(tags);
 
 findtableview->setItem(i,0,item_title);
 findtableview->setItem(i,1,item_info);
}


findtableview - это QTableWidget.
Записан

Собираю информацию по крупицам
http://webhamster.ru
Dendy
Гость
« Ответ #5 : Январь 30, 2009, 02:54 »

Скорее всего баг в Qt. Если не последняя версия - обновитесь. Попробуйте снапшот. Если баг останется - проверьте совпадает ли прямоугольник на отрисовку с реальным что видно на экране:

Код
C++ (Qt)
findtableview->viewport()->installEventFilter( this );
...
bool This::eventFilter( QObject * o, QEvent * e )
{
 if ( o == findtableview->viewport() && e->type() == QEvent::Paint )
 {
   QPaintEvent * pe = static_cast<QPaintEvent*>( e );
   qDebug() << "Rect to paint:" << pe->rect();
   qDebug() << "Visible rect:" << findtableview->viewport()->visibleRegion()->boundingRect();
   return false;
 }
 return false;
}
 
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #6 : Январь 30, 2009, 14:12 »

Скорее всего баг в Qt. Если не последняя версия - обновитесь. Попробуйте снапшот. Если баг останется - проверьте совпадает ли прямоугольник на отрисовку с реальным что видно на экране

Еще не обновился, на текущей версии имею такое (двигаю слайдером)

Цитировать
Rect to paint: QRect(0,0 812x111)
Visible rect: QRect(0,0 812x111)

Rect to paint: QRect(0,0 812x111)
Visible rect: QRect(0,0 812x111)

Rect to paint: QRect(0,82 812x29)
Visible rect: QRect(0,0 812x111)

Rect to paint: QRect(0,0 812x111)
Visible rect: QRect(0,0 812x111)

Rect to paint: QRect(0,0 812x111)
Visible rect: QRect(0,0 812x111)

Rect to paint: QRect(0,0 812x18)
Visible rect: QRect(0,0 812x111)

Rect to paint: QRect(0,0 812x40)
Visible rect: QRect(0,0 812x111)

Rect to paint: QRect(0,0 812x40)
Visible rect: QRect(0,0 812x111)

Rect to paint: QRect(0,0 812x40)
Visible rect: QRect(0,0 812x111)

Rect to paint: QRect(0,91 812x20)
Visible rect: QRect(0,0 812x111)

Rect to paint: QRect(0,91 812x20)
Visible rect: QRect(0,0 812x111)

Rect to paint: QRect(0,0 812x40)
Visible rect: QRect(0,0 812x111)

Rect to paint: QRect(0,0 812x40)
Visible rect: QRect(0,0 812x111)

Rect to paint: QRect(0,0 812x40)
Visible rect: QRect(0,0 812x111)

Rect to paint: QRect(0,91 812x20)
Visible rect: QRect(0,0 812x111)

Rect to paint: QRect(0,91 812x20)
Visible rect: QRect(0,0 812x111)

Rect to paint: QRect(0,91 812x20)
Visible rect: QRect(0,0 812x111)

Rect to paint: QRect(0,91 812x20)
Visible rect: QRect(0,0 812x111)

Rect to paint: QRect(0,102 812x9)
Visible rect: QRect(0,0 812x111)

Код
C++ (Qt)
qDebug() << "Visible rect:" << findtableview->viewport()->visibleRegion()->boundingRect();
 

Тогда уж так

Код
C++ (Qt)
qDebug() << "Visible rect:" << (findtableview->viewport()->visibleRegion()).boundingRect();
 

иначе не компилится.
Записан

Собираю информацию по крупицам
http://webhamster.ru
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #7 : Январь 30, 2009, 16:13 »

А вот какой лог если заголовки видны и отрисовка правильная.
Честнагря не понимаю, показывают ли ети числа отсутсвие проблемы в таком режиме?

Цитировать
Rect to paint: QRect(0,0 812x86)
Visible rect: QRect(0,0 812x86)

Rect to paint: QRect(0,0 812x86)
Visible rect: QRect(0,0 812x86)

Rect to paint: QRect(0,66 812x20)
Visible rect: QRect(0,0 812x86)

Rect to paint: QRect(0,66 812x20)
Visible rect: QRect(0,0 812x86)

Rect to paint: QRect(0,66 812x20)
Visible rect: QRect(0,0 812x86)

Rect to paint: QRect(0,66 812x20)
Visible rect: QRect(0,0 812x86)

Rect to paint: QRect(0,66 812x20)
Visible rect: QRect(0,0 812x86)

Rect to paint: QRect(0,72 812x14)
Visible rect: QRect(0,0 812x86)

Rect to paint: QRect(0,0 812x14)
Visible rect: QRect(0,0 812x86)

Rect to paint: QRect(0,0 812x20)
Visible rect: QRect(0,0 812x86)

Rect to paint: QRect(0,0 812x20)
Visible rect: QRect(0,0 812x86)

Rect to paint: QRect(0,0 812x20)
Visible rect: QRect(0,0 812x86)

Rect to paint: QRect(0,0 812x20)
Visible rect: QRect(0,0 812x86)

Rect to paint: QRect(0,0 812x20)
Visible rect: QRect(0,0 812x86)

Rect to paint: QRect(0,66 812x20)
Visible rect: QRect(0,0 812x86)

Rect to paint: QRect(0,66 812x20)
Visible rect: QRect(0,0 812x86)

Rect to paint: QRect(0,66 812x20)
Visible rect: QRect(0,0 812x86)

Rect to paint: QRect(0,66 812x20)
Visible rect: QRect(0,0 812x86)

Rect to paint: QRect(0,0 812x20)
Visible rect: QRect(0,0 812x86)

Rect to paint: QRect(0,0 812x20)
Visible rect: QRect(0,0 812x86)

Rect to paint: QRect(0,0 812x20)
Visible rect: QRect(0,0 812x86)

Rect to paint: QRect(0,0 812x20)
Visible rect: QRect(0,0 812x86)

Rect to paint: QRect(0,0 812x86)
Visible rect: QRect(0,0 812x86)
Записан

Собираю информацию по крупицам
http://webhamster.ru
Dendy
Гость
« Ответ #8 : Январь 30, 2009, 16:26 »

Видно, что события приходят правильно. Значит нужно смотреть кто неправильно их обрабатывает. А делает это QTableWidget или QTableView в своих методах рисования содержимого.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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