Пишу программку с этой библиотекой и надо бы сделать таблицу. Вроде QTableWidget у меня работает, но есть пара вопросов. Может кто-нибудь уже сталкивался
1. Нет никаких проблем обновить таблицу. Обновляешь QTableWidgetItem и таблица обновляется. Но если программа имеет 2 threads. В первом threadе создается диалог с таблицей. А второй получает данные и использует static function этого диалога, где обновляются QTableWidgetItemы. Все хорошо, но таблица не обновляется. Попытался использовать repaint() или слать аналогичный event в QtApplication core. Qt ругается на второй thread и виснет. При этом QLineEdit работает без проблем.
2. Второй прикол опять с таблицей. Я отгрыз место под таблицу. Таблица появлятся без всяких ячеек. Потом программа узнает кол-во строк и заполняет. Но при этом остается пустое место справа и снизу. Как бы заставить Items расширятся?
Здравствуйте, 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>Потому как таблица сама ни в жисть не догадается, какого размера тебе нажна колонка.
А>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>Наверно, есть менее кривые пути
Здравствуйте, Аноним, Вы писали:
А>Пришлось напрячься и найти эту функцию postEvent( UiObject, pEvent). Она кладет в очередь движка Qt. А>Теперь это все работает. Но исполнение ... Вот этот pEvent должен создаваться в heap вторичного threada. А в Qt thread это будет очищать. А>Классно!