QTableWidget in Qt library
От: Vasilich2004  
Дата: 12.01.06 20:41
Оценка:
Пишу программку с этой библиотекой и надо бы сделать таблицу. Вроде QTableWidget у меня работает, но есть пара вопросов. Может кто-нибудь уже сталкивался
1. Нет никаких проблем обновить таблицу. Обновляешь QTableWidgetItem и таблица обновляется. Но если программа имеет 2 threads. В первом threadе создается диалог с таблицей. А второй получает данные и использует static function этого диалога, где обновляются QTableWidgetItemы. Все хорошо, но таблица не обновляется. Попытался использовать repaint() или слать аналогичный event в QtApplication core. Qt ругается на второй thread и виснет. При этом QLineEdit работает без проблем.

2. Второй прикол опять с таблицей. Я отгрыз место под таблицу. Таблица появлятся без всяких ячеек. Потом программа узнает кол-во строк и заполняет. Но при этом остается пустое место справа и снизу. Как бы заставить Items расширятся?

С уважением, Андрей.
Re: QTableWidget in Qt library
От: Dair Россия  
Дата: 13.01.06 05:35
Оценка:
Здравствуйте, Vasilich2004, Вы писали:

V>1. Нет никаких проблем обновить таблицу. Обновляешь QTableWidgetItem и таблица обновляется. Но если программа имеет 2 threads. В первом threadе создается диалог с таблицей. А второй получает данные и использует static function этого диалога, где обновляются QTableWidgetItemы. Все хорошо, но таблица не обновляется. Попытался использовать repaint() или слать аналогичный event в QtApplication core. Qt ругается на второй thread и виснет. При этом QLineEdit работает без проблем.


Не знаю, что там в Qt4 (а QTableWidget оттуда, по моим предположениям, потому как в моей доке на Qt3 его нет , но многие методы не являются thread-safe.
Общая рекомендация: иметь shared "буфер данных", в который писать одним тредом и читать из другого (с заполнением таблицы в твоём случае).

V>2. Второй прикол опять с таблицей. Я отгрыз место под таблицу. Таблица появлятся без всяких ячеек. Потом программа узнает кол-во строк и заполняет. Но при этом остается пустое место справа и снизу. Как бы заставить Items расширятся?


Думаю, "вручную" (тут пишу совсем наобум, если честно, только из общих представлений о дизайне Qt )
Потому как таблица сама ни в жисть не догадается, какого размера тебе нажна колонка.
Re[2]: QTableWidget in Qt library
От: Аноним  
Дата: 13.01.06 14:53
Оценка:
Dair, спасибо за ответ. Вы правы — я использую qt4 и даже в windows. Написал в Unix, так как еще недавно qt был только unix продуктом.

Если я кликаю на таблицу, то новые значения появляются.
Поэтому проблемы с буфером у меня нету. Проблема кинуть event.
И второй пункт вручную работает.

Ну что ж придется немного плотнее покопаться в этом пакете.

С уважением, Андрей.

Здравствуйте, Dair, Вы писали:

D>Здравствуйте, Vasilich2004, Вы писали:


V>>1. Нет никаких проблем обновить таблицу. Обновляешь QTableWidgetItem и таблица обновляется. Но если программа имеет 2 threads. В первом threadе создается диалог с таблицей. А второй получает данные и использует static function этого диалога, где обновляются QTableWidgetItemы. Все хорошо, но таблица не обновляется. Попытался использовать repaint() или слать аналогичный event в QtApplication core. Qt ругается на второй thread и виснет. При этом QLineEdit работает без проблем.


D>Не знаю, что там в Qt4 (а QTableWidget оттуда, по моим предположениям, потому как в моей доке на Qt3 его нет , но многие методы не являются thread-safe.

D>Общая рекомендация: иметь shared "буфер данных", в который писать одним тредом и читать из другого (с заполнением таблицы в твоём случае).

V>>2. Второй прикол опять с таблицей. Я отгрыз место под таблицу. Таблица появлятся без всяких ячеек. Потом программа узнает кол-во строк и заполняет. Но при этом остается пустое место справа и снизу. Как бы заставить Items расширятся?


D>Думаю, "вручную" (тут пишу совсем наобум, если честно, только из общих представлений о дизайне Qt )

D>Потому как таблица сама ни в жисть не догадается, какого размера тебе нажна колонка.
Re[3]: QTableWidget in Qt library
От: Dair Россия  
Дата: 13.01.06 21:41
Оценка:
А>Dair, спасибо за ответ. Вы правы — я использую qt4 и даже в windows. Написал в Unix, так как еще недавно qt был только unix продуктом.
????!!!!!
здесь (Changes от Qt 2.2.1) пишут уже про изменения для виндовой версии. Так что "недавно" — это лет 5 минимум

А>Если я кликаю на таблицу, то новые значения появляются.

А>Поэтому проблемы с буфером у меня нету. Проблема кинуть event.

Я бы делал заполнение некого shared буфера в дочернем thread'е, и считывание из оного буфера в основном в QTimerEvent.
Наверно, есть менее кривые пути
Re[4]: QTableWidget in Qt library
От: Аноним  
Дата: 14.01.06 00:17
Оценка:
Пришлось напрячься и найти эту функцию postEvent( UiObject, pEvent). Она кладет в очередь движка Qt.
Теперь это все работает. Но исполнение ... Вот этот pEvent должен создаваться в heap вторичного threada. А в Qt thread это будет очищать.
Классно!

Здравствуйте, Dair, Вы писали:

А>>Dair, спасибо за ответ. Вы правы — я использую qt4 и даже в windows. Написал в Unix, так как еще недавно qt был только unix продуктом.

D>????!!!!!
D>здесь (Changes от Qt 2.2.1) пишут уже про изменения для виндовой версии. Так что "недавно" — это лет 5 минимум

А>>Если я кликаю на таблицу, то новые значения появляются.

А>>Поэтому проблемы с буфером у меня нету. Проблема кинуть event.

D>Я бы делал заполнение некого shared буфера в дочернем thread'е, и считывание из оного буфера в основном в QTimerEvent.

D>Наверно, есть менее кривые пути
Re[5]: QTableWidget in Qt library
От: Dair Россия  
Дата: 14.01.06 14:30
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Пришлось напрячься и найти эту функцию postEvent( UiObject, pEvent). Она кладет в очередь движка Qt.

А>Теперь это все работает. Но исполнение ... Вот этот pEvent должен создаваться в heap вторичного threada. А в Qt thread это будет очищать.
А>Классно!

Квотишь странно, но мысль я понял, ага.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.