crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QTreeWidget::clear() обрушивает программу.
Litkevich Yuriy
  опции профиля:
сообщение 23.1.2011, 18:39
Сообщение #1


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Столкнулся с ситуацией, когда QTreeWidget::clear() роняет программу. Только из-за того, что используются его сигнал currentItemChanged(...)
В обработчике сигнала банальный код:
void MainWindow::currentItemChanged(QTreeWidgetItem * current, QTreeWidgetItem *)
{
    qDebug() << "currentItemChanged";
    QTreeWidgetItem *parentItem = current->parent();
    if (parentItem)
        deleteFileAction->setEnabled(true);
    else
        deleteFileAction->setDisabled(true);
}


Если очистку обернуть так:
    m_tree->blockSignals(true);
    m_tree->clear();
    m_tree->blockSignals(false);
то проблема больше не возникает. Однако такое поведение всё равно лажа.

П.С.
Использована Qt 4.7.0



ещё одно решение - проверять current, т.е.:
void MainWindow::currentItemChanged(QTreeWidgetItem * current, QTreeWidgetItem *)
{
    qDebug() << "currentItemChanged";
    if (!current) return; // <---
    QTreeWidgetItem *parentItem = current->parent();
    if (parentItem)
        deleteFileAction->setEnabled(true);
    else
        deleteFileAction->setDisabled(true);
}


Но и это по сути обход проблемы, т.к. если текущий элемент умер, то зачем же сигналить так?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Obey-Kun
  опции профиля:
сообщение 23.1.2011, 20:50
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 96
Регистрация: 24.3.2010
Пользователь №: 1556

Спасибо сказали: 3 раз(а)




Репутация:   0  


В багзиллу.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 23.1.2011, 23:36
Сообщение #3


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Цитата(Litkevich Yuriy @ 23.1.2011, 18:39) *
ещё одно решение - проверять current,
я так и поступаю всегда
Цитата(Litkevich Yuriy @ 23.1.2011, 18:39) *
Но и это по сути обход проблемы, т.к. если текущий элемент умер, то зачем же сигналить так?
Потому что этот сигнал содержит еще и предыдущий элемент, и он валидный. Пользователю это может понадобиться (не спрашивайте зачем). Просто это особенность которую нужно знать. ИМХО, это скорее недостаток документации, а не бага Qt
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Obey-Kun
  опции профиля:
сообщение 24.1.2011, 14:08
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 96
Регистрация: 24.3.2010
Пользователь №: 1556

Спасибо сказали: 3 раз(а)




Репутация:   0  


О недостатках документации тоже лучше сообщать.
Это не оно -- http://bugreports.qt.nokia.com/browse/QTBUG-16614 ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 24.1.2011, 19:57
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Obey-Kun @ 24.1.2011, 16:08) *
О недостатках документации тоже лучше сообщать.
Это не оно -- http://bugreports.qt.nokia.com/browse/QTBUG-16614 ?
да похоже.

Цитата(igor_bogomolov @ 24.1.2011, 1:36) *
я так и поступаю всегда
в примерах у тролей тоже, но нигде ни слухом ни духом о том, зачем.
Цитата(igor_bogomolov @ 24.1.2011, 1:36) *
это скорее недостаток документации
согласен. Если поведение считается нормой, то должно быть задокументировано.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Obey-Kun
  опции профиля:
сообщение 24.1.2011, 20:11
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 96
Регистрация: 24.3.2010
Пользователь №: 1556

Спасибо сказали: 3 раз(а)




Репутация:   0  


Проголосуйте в том баге тогда, ведь вы с ним тоже столкнулись :).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 24.1.2011, 20:48
Сообщение #7


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Да он не такой уж значимый, что бы за него голосовать. Есть баги по важнее. Решат в порядке очереди.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.12.2024, 21:50