Название: Q3ListView запрет пользователю сортировать содержимое Отправлено: alexlogvinenkoit от Декабрь 28, 2011, 14:19 Всем привет и с наступающим!
Подскажите, пожалуйста, как запретить пользователю сортировать содержимое Q3ListView, который разбит на несколько колонок? И еще: заполнение Q3ListView происходит в отдельном потоке, поэтому кидаю в поток указатель на Q3ListView и создаю Q3ListViewItem. Тут все работает, только вот иногда моментально, а иногда с задержкой до 5 секунд. Как это можно решить? Спасибо! Название: Re: Q3ListView запрет пользователю сортировать содержимое Отправлено: andrew.k от Декабрь 28, 2011, 14:35 Нельзя из другого потока взаимодействовать с GUI!
Сортировка (http://developer.qt.nokia.com/doc/qt-4.8/q3listview.html#setSorting) Название: Re: Q3ListView запрет пользователю сортировать содержимое Отправлено: alexlogvinenkoit от Декабрь 28, 2011, 14:42 Очень даже можно и легко :)
Либо напрямую через указатель, либо через QMetaObject::invokeMethod(...). Но проблема моя не в этом :) С запретом сортировки разобрался, спасибо! Со скоростью добавления item-а в listview можно как-то решить? Название: Re: Q3ListView запрет пользователю сортировать содержимое Отправлено: andrew.k от Декабрь 28, 2011, 15:21 Нельзя из другого потока взаимодействовать с GUI напрямую через указатель.
Через invokeMethod хз. Наверное можно. А если требуется по заданию, чтобы приложение падало и глючило, то можно. И легко. Название: Re: Q3ListView запрет пользователю сортировать содержимое Отправлено: alexlogvinenkoit от Декабрь 28, 2011, 15:38 Да ладно, приложение работает как часики, не падает, не глючит...
Есть в приложении QStackedWidget - там есть setCurrentIndex(int index), надо было из другого потока менять индекс, так я и познакомился с QMetaObject::invokeMethod(...). Работает, не глючит, на бажит, даже warnings не выдает. Тут вопрос в другом, в Q3ListView записываются Q3ListViewItem-ы, так иногда пишет мгновенно, а иногда секунд через 5, но не более. Может его как-то принудительно рефрешить или чего-то еще? Название: Re: Q3ListView запрет пользователю сортировать содержимое Отправлено: alexlogvinenkoit от Декабрь 28, 2011, 16:08 Вот вам и нельзя! Все можно, главное мыслить не шаблонно!
Код: ThreadFunc(Q3ListView * listView) Всем спасибо! И еще раз с наступающим! Название: Re: Q3ListView запрет пользователю сортировать содержимое Отправлено: andrew.k от Декабрь 28, 2011, 16:56 Вот вам и нельзя! Все можно, главное мыслить не шаблонно! Так делать нельзя! Нельзя создавать GUI объекты нигде, кроме как в GUI-потоке. Лучше бы ты познакомился с документацией.Код: ThreadFunc(Q3ListView * listView) QMetaObject::invokeMethod(listView, "repaint", Qt::QueuedConnection); //Перерисовуем Q3ListView Тогда такие извращения будут не нужны. Название: Re: Q3ListView запрет пользователю сортировать содержимое Отправлено: alexlogvinenkoit от Декабрь 28, 2011, 17:01 Т.е. предлагаешь передавать данные в GUI-поток, например создать public функцию в виджете, уже там формировать Q3ListViewItem(listView, ...)?
Название: Re: Q3ListView запрет пользователю сортировать содержимое Отправлено: andrew.k от Декабрь 28, 2011, 17:04 Т.е. предлагаешь передавать данные в GUI-поток, например создать public функцию в виджете, уже там формировать Q3ListViewItem(listView, ...)? Как ты понимаешь, если ты будешь по указателю вызывать функцию, ничего не поменяется.Посмотри примеры. Гугол Gui QThread. Из QThread эмит сигнала с данными в гуи его ловишь. Это же не трудно. Название: Re: Q3ListView запрет пользователю сортировать содержимое Отправлено: alexlogvinenkoit от Декабрь 28, 2011, 17:08 Ага, понял!
Создаем какой-то слот в GUI потоке, создаем поток и коннектим сигнал потока со слотом виджета, а уже в потоке посылаем сигнал (emit)... Как-то так? Название: Re: Q3ListView запрет пользователю сортировать содержимое Отправлено: andrew.k от Декабрь 28, 2011, 17:18 И зачем тебе Q3ListView? Почему не нормальный QListWidget? Судя по вопросу, ты с нуля пишешь приложение, а не адаптируешь что-то.
Название: Re: Q3ListView запрет пользователю сортировать содержимое Отправлено: alexlogvinenkoit от Декабрь 28, 2011, 17:27 QListView был изначально, только вот я с Model-View представлением не совсем разобрался, чтобы разбить данные по колонкам, а сроки поджимают :)
Разберусь, сделаю нормально с QListView или QListWidget... И потоки переделаю :) Спасибо! Название: Re: Q3ListView запрет пользователю сортировать содержимое Отправлено: andrew.k от Декабрь 28, 2011, 17:53 Q3ListView - это класс для совместимости с Qt3. В новых проектах использовать его нет смысла.
QListView - с моделями QListWidget - классический item-based виджет. он тебе и нужен. Название: Re: Q3ListView запрет пользователю сортировать содержимое Отправлено: alexlogvinenkoit от Декабрь 30, 2011, 13:58 Блин! Вот почему раньше на глаза не попался, я бы только его и использовал :)
Обязательно переделаю и с GUI потоком тоже разберусь :) Огромное спасибо! Ну и с наступающим! |