Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ глюк с QTableWidget

Автор: borune 4.1.2011, 20:45

Господа, помогите разобраться. Полдня копаю и ни к чему не пришел.

Есть такой код:

Раскрывающийся текст
QTableWidget *table;

....

void MainWindow::my_funct0()
{
table = new QTableWidget(this);
table->setColumnCount(6);
table->setRowCount(2);
table->setGeometry(40,90,10+table->columnWidth(0)+table->columnWidth(1)+table->columnWidth(2)+table->columnWidth(3)+table->columnWidth(4)+table->columnWidth(5),40+table->rowCount()*50);
table->show();
}

Выделение ячеек в таком случае возможно только один раз. То есть при клике мышью на какую-либо ячейку таблицы эта ячейка выделяется цветом, но при клике на другую ячейку сразу после этого выделения не происходит.

Если я изменяю вышеприведенный код вот так:

Раскрывающийся текст
QTableWidget *table;

....

void MainWindow::my_funct1()
{
table = new QTableWidget(this);
table->show();
delete table;

table = new QTableWidget(this);
table->setColumnCount(6);
table->setRowCount(2);
table->setGeometry(40,90,10+table->columnWidth(0)+table->columnWidth(1)+table->columnWidth(2)+table->columnWidth(3)+table->columnWidth(4)+table->columnWidth(5),40+table->rowCount()*50);
table->show();
}

то любая ячейка выделяется сколько угодно раз. Причем если убрать первую функцию show(), то результат будет точно таким же, как и в первом случае.

Объясните, пожалуйста, в чем тут дело.


Автор: borune 4.1.2011, 22:14

Описанная проблема проявляется на 7ке. В ХР ее нету. Версии КуТэ стоят одинаковые.

Автор: Litkevich Yuriy 4.1.2011, 22:46

borune, а компилишь в какой ОСьке?

Автор: borune 5.1.2011, 0:48

Цитата(Litkevich Yuriy @ 4.1.2011, 22:46) *
borune, а компилишь в какой ОСьке?


ну соответственно в 7ке и в хр. под линями еще не пробовал)

Автор: ufna 5.1.2011, 0:56

Может скинешь код а главное скомпилированный пример?

Автор: borune 5.1.2011, 2:49

Цитата(ufna @ 5.1.2011, 0:56) *
Может скинешь код а главное скомпилированный пример?

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

Всю программу кидать не имеет смысла, могу создать отдельный проект, где будет только работа с таблицей.

Автор: Litkevich Yuriy 5.1.2011, 2:52

Цитата(borune @ 5.1.2011, 4:49) *
могу создать отдельный проект, где будет только работа с таблицей.
вот это и надо, минимальный компилируемый пример, который воспроизводит ошибку. А иначе людям лень будет самим, что-то набивать да компилировать.

Автор: borune 5.1.2011, 12:23

к сожалению, пример не воспроизводит ошибку..надо копать глубже

но вопрос остается..один и тот же код на разных ос работает по-разному..

Автор: ufna 5.1.2011, 12:33

Если в примере ошибки нет, а в проекте есть => косяк скорее всего в каком-нибудь кэше. Очистку проекта и re-qmake делал?

Автор: borune 5.1.2011, 18:52

Цитата(ufna @ 5.1.2011, 12:33) *
Если в примере ошибки нет, а в проекте есть => косяк скорее всего в каком-нибудь кэше. Очистку проекта и re-qmake делал?


даже комп перезагружал

Автор: ufna 5.1.2011, 21:29

Весь проект секретен? Можно в личку.

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

Автор: DEADHUNT 5.1.2011, 21:38

вся проблема в том что объект удаляется, а наверняка там ещё какой нибудь сигнал вызывается, поэтому в данном случае вместо delete лучше использовать deleteLater

Автор: borune 7.1.2011, 0:43

Цитата(ufna @ 5.1.2011, 21:29) *
Весь проект секретен? Можно в личку.

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


Ну эта проблема не заслуживает такого серьезного, подхода я думаю)

Только Вы неправильно прочитали - РАБОТАЕТ на хр, и НЕ работает на 7ке)

Это, кстати, не единичный обнаруженный мной случай разной работы одной и той же программы в разных ОС.

DEADHUNT, а что это за deleteLater?

DEADHUNT в смысле чем он тут может помочь?

:rolleyes:

Автор: ufna 7.1.2011, 1:09

А, ну если работает на ХР и не работает на семерке (что означает на одном компе пашет а на втором нет, дело не в оськах), то дело на 95% в каком-нибудь кэше запавшем, сбившемся компиляторе/IDE и т.п.

Автор: Алексей1153 7.1.2011, 1:12

иногда бывает , что ищешь странный глюк, ищешь... А потом делаешь полный принудительный ребилд всего - и оно начинает работать нормально :)

а иногда не начинает

Автор: Litkevich Yuriy 7.1.2011, 13:36

а какая версия Qt?

Автор: borune 7.1.2011, 20:03

Цитата(Litkevich Yuriy @ 7.1.2011, 13:36) *
а какая версия Qt?


на 4.6.0 в 7ке не работает, на 4.7.0 на 7ке не работает, на хр работает. все сборки 32ух битные

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)