Russian Qt Forum
Ноябрь 27, 2024, 11:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Исключение при попытке спрятать элементы QListWidget  (Прочитано 4206 раз)
Astrologer
Гость
« : Ноябрь 25, 2010, 15:41 »

Всем привет. Организовал поиск по элементам QListWidget - создал QLineEdit и при изменении текста в нем, ищу по списку полей! Если нету такого элемента то просто прячу.

fieldsTree - тот самый QListWidget.
Код
C++ (Qt)
.....
connect(googleLine, SIGNAL(textChanged(QString)), fieldsTree, SLOT(selectFields(QString)));
........
 

Код
C++ (Qt)
void QTreeCheckable::selectFields(QString text)
{
   hideAll();
   if (text.isEmpty()) {showAll();return;}
   int countka  = count();
   for (int i = 0; i < countka; i++)
   {
       if (!item(i)->text().contains(text, Qt::CaseInsensitive)){
           item(i)->setHidden(true);
    }
       else {
           item(i)->setHidden(false);
       }
   }
}
 
void QTreeCheckable::hideAll()
{
   for (int i = 0; i < count(); i++)
       item(i)->setHidden(true);
}
 

Список полей - порядка 250. Стоит проскроллить его и попробовать ввести любую букву - вылетает ошибка.
Цитировать
Запускается D:\my_projects\QNewDbf\debug\QNewDbf.exe...
ASSERT failure in QVector<T>::at: "index out of range", file ..\..\include/QtCore/../../src/corelib/tools/qvector.h, line 338
D:\my_projects\QNewDbf\debug\QNewDbf.exe завершился с кодом 3

Никак не пойму причину. Подскажите пожалуйста. Заранее спасибо.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Ноябрь 25, 2010, 15:59 »

Странно, что не было ругани при старте насчёт connect(), т.к.

Код
C++ (Qt)
void QLineEdit::textChanged ( const QString & text ) [signal]
Записан

Qt 5.11/4.8.7 (X11/Win)
Astrologer
Гость
« Ответ #2 : Ноябрь 25, 2010, 16:12 »

Если поменять на
Код
C++ (Qt)
void selectFields(QString& text)
{
...
}
 
То вообще не работает.
Записан
Sancho_s_rancho
Гость
« Ответ #3 : Ноябрь 25, 2010, 16:15 »

Странно, что не было ругани при старте насчёт connect(), т.к.

Код
C++ (Qt)
void QLineEdit::textChanged ( const QString & text ) [signal]

Qt uses normalized signatures to decide whether two given signals and slots are compatible. Normalization reduces whitespace to a minimum, moves 'const' to the front where appropriate, removes 'const' from value types and replaces const references with values.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Ноябрь 25, 2010, 16:17 »

А где "const"? Или не в курсах, что это совершенно разные типы?

Код
C++ (Qt)
...
connect(googleLine, SIGNAL(textChanged(const QString&)), fieldsTree, SLOT(selectFields(const QString&)));
...
 
void selectFields(const QString& text)
...
Записан

Qt 5.11/4.8.7 (X11/Win)
Astrologer
Гость
« Ответ #5 : Ноябрь 25, 2010, 16:25 »

Все равно это не решило проблему.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Ноябрь 25, 2010, 16:37 »

Ну дык посмотрите в отладчике на какой строке падает.
Записан

Qt 5.11/4.8.7 (X11/Win)
alexman
Гость
« Ответ #7 : Ноябрь 25, 2010, 18:23 »

Ну дык посмотрите в отладчике на какой строке падает.
+100 Улыбающийся
Записан
Astrologer
Гость
« Ответ #8 : Декабрь 06, 2010, 17:03 »

Вылетает здесь, в файле application_win.cpp, функция QtWndProc@16.
Код
C++ (Qt)
if (widget->isEnabled())
               result = sm_blockUserInput
                           ? true
                           : qt_keymapper_private()->translateKeyEvent(widget, msg, g != 0);
           break;
       }
 

Почему так может быть? Два потока пытаются захватить один и тот же ресурс?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.223 секунд. Запросов: 22.