Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt]Выделение виджетов в QListWidget 
:(
    Опции темы
feanor59
Дата 14.3.2009, 03:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 24.1.2008
Где: Пермь

Репутация: нет
Всего: нет



Что есть: QListWidget, итемами в котором являются QCheckBox. QCheckBox устанавливаются с помощью setItemWidget().
Что надо: дать возможность ещё и _выделять_ итемы, а не только устанавливать/снимать галки.
PM MAIL ICQ GTalk   Вверх
SABROG
Дата 14.3.2009, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Обрабатывай сигнал stateChanged и по нему выделяй или снимай выделение итема к которому он относится. Смотри в QItemSelectionModel.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
feanor59
Дата 14.3.2009, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 24.1.2008
Где: Пермь

Репутация: нет
Всего: нет



Цитата(SABROG @ 14.3.2009,  17:20)
Обрабатывай сигнал stateChanged и по нему выделяй или снимай выделение итема к которому он относится. Смотри в QItemSelectionModel.

да нет. всё не так просто. мне нужно, чтобы виджеты выделялись независимо от изменения состояния. т. е. чтобы я могу выделить, к примеру, все виджеты, не изменив их состояния
PM MAIL ICQ GTalk   Вверх
SABROG
Дата 15.3.2009, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



А разве изначально сделано не так, чтобы виджет создавался только при двойном клике на итем? Или у тебя умышленно openPersistentEditor стоит?


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
feanor59
Дата 15.3.2009, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 24.1.2008
Где: Пермь

Репутация: нет
Всего: нет



Цитата(SABROG @ 15.3.2009,  01:27)
А разве изначально сделано не так, чтобы виджет создавался только при двойном клике на итем? Или у тебя умышленно openPersistentEditor стоит?

оО, нет, установеленные виджеты сразу активны, думаю ты сейчас про делегирование говоришь, а не про статическую установку виджетов на айтемы. и в случае делегирования, мне всё равно нужно, чтобы виджеты отображались всегда.
PM MAIL ICQ GTalk   Вверх
Любитель
Дата 16.3.2009, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Быть может есть решение с QListWidget, но в любом случае лучше изначачально пользоваться чистым QListView, у него разрешается отметка элементов, у модели реализуется обработка соответствующей роли и устанавливается флаг, разрешающий отметку элементов. Как-то так smile Сорри за каламбурность - давно на практике не работал с Qt, но архитектура Model/View в 4-ке была всегда.

Это сообщение отредактировал(а) Любитель - 17.3.2009, 18:37


--------------------
PM MAIL ICQ Skype   Вверх
feanor59
Дата 17.3.2009, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 24.1.2008
Где: Пермь

Репутация: нет
Всего: нет



Цитата(Любитель @ 16.3.2009,  20:00)
Быть может есть решение с QListWidget, но в любом случае лучше изначачально пользоваться чистым QListView, у него разрешается отметка элементов, у модели реализуется обработка соответствующей роли и устанавливается флаг, разрешающий отметку элементов. Как-то так smile Сорри за каламбурность - давно на парктике не работал с Qt, но архитектура Model/View в 4-ке была всегда.

хм, мб я не до конца вкурил, но как (где) в таком случае хранить состояния чекбоксов? т. е. модель это QStringListModel и она фактически  хранит подписи к чекбоксам, а что делать с состояниями?! 
зы
основываюсь на экземпле spinboxdelegate
PM MAIL ICQ GTalk   Вверх
Любитель
Дата 17.3.2009, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Создавать свою модель. Можно наследоваться. Где хранить - непринципиально.


--------------------
PM MAIL ICQ Skype   Вверх
feanor59
Дата 17.3.2009, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 24.1.2008
Где: Пермь

Репутация: нет
Всего: нет



Цитата(Любитель @ 17.3.2009,  16:32)
Создавать свою модель. Можно наследоваться. Где хранить - непринципиально.

уже вычитал) пробую. спасибо.
PM MAIL ICQ GTalk   Вверх
feanor59
Дата 18.3.2009, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 24.1.2008
Где: Пермь

Репутация: нет
Всего: нет



возникли проблемы:
1) при отображении делегата,  текст самого элемента остаётся на фоне => наложение текста чекбокса и текста элемента. (UPD: поборол введением новой своей роли и возвратом пустой строки на дисплей роль)
2) какой флаг и как нужно поставить, чтобы можно было выделять _делегаты_? пока такого не нашёл.
3) есть ли возможность единожды сказать, чтобы все элементы списка отображались перманентно с делегатом редактирования?

Это сообщение отредактировал(а) feanor59 - 18.3.2009, 04:23
PM MAIL ICQ GTalk   Вверх
feanor59
Дата 18.3.2009, 06:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 24.1.2008
Где: Пермь

Репутация: нет
Всего: нет



Всплыла ещё одна проблема. После обновления QListView не устанавливается openPersistentEditor
Код обновления:
Код

QItemDelegate *delegate = new CheckBoxDelegate();    

    categoriesModel.reset(new PairListModel(pairs));
    categoriesModel->setWorkTable("adb_categories");
    m_ui.listCategories->setModel(categoriesModel.get());
    m_ui.listCategories->setItemDelegate(delegate);

    for (int i = 0; i < categoriesModel->rowCount(QModelIndex()); ++i)
        m_ui.listCategories->openPersistentEditor(categoriesModel->index(i, 0, QModelIndex()));

    m_ui.listCategories->update();


При первом выполнении этого кода, всё отлично, при повторном openPersistentEditor не срабатывает.
UPD: разобрался, проблема была в смарт поинтерах, а конкретно в том, что до того, как QListView получал новую модель, уничтожалась старая.

Это сообщение отредактировал(а) feanor59 - 18.3.2009, 07:25
PM MAIL ICQ GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.1011 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.