crossplatform.ru

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

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);
}


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

Сообщений в этой теме


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


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 27.6.2025, 23:12