Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt] QListWidget, Выбор нескольких элементов, без нажатия control 
:(
    Опции темы
lxx
Дата 22.9.2010, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Приветствую!
Такая проблема:
Есть QlistWidget с возможностью выбора нескольких элементов. Чтобы выбрать несколько элементов нужно при выборе зажимать Ctrl.
Можно-ли сделать так, чтобы это можно было делать без удерживания Ctrl, то есть нажал на элемент один раз - он выбрался, второй раз - выбор снялся.
Пробовал в сигнале itemCliced делать следующее:
Код

void PlugApmBuilder::on_listWidget_itemClicked(QListWidgetItem* item)
{
    if (item->isSelected()) item->setSelected(false);
    else item->setSelected(true);

// Выбор обязательных элементов
    QList<QListWidgetItem *> list;
    list = ui->listWidget->findItems(QString("element"), Qt::MatchExactly);
    if (list.count() > 0) list[0]->setSelected(true);

}

Но при клике элемент выделяется и сразу сбрасывается.
Еще есть идея при клике как-то программно посылать Qt::ControlModifier, но как это сделать я не знаю.

Подскажите что-нибудь...
PM MAIL   Вверх
RedDigger
Дата 25.9.2010, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист



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

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



Цитата(lxx @ 22.9.2010,  15:38)
Приветствую!
Такая проблема:
Есть QlistWidget с возможностью выбора нескольких элементов. Чтобы выбрать несколько элементов нужно при выборе зажимать Ctrl.
Можно-ли сделать так, чтобы это можно было делать без удерживания Ctrl, то есть нажал на элемент один раз - он выбрался, второй раз - выбор снялся.
Пробовал в сигнале itemCliced делать следующее:
Код

void PlugApmBuilder::on_listWidget_itemClicked(QListWidgetItem* item)
{
    if (item->isSelected()) item->setSelected(false);
    else item->setSelected(true);

// Выбор обязательных элементов
    QList<QListWidgetItem *> list;
    list = ui->listWidget->findItems(QString("element"), Qt::MatchExactly);
    if (list.count() > 0) list[0]->setSelected(true);

}

Но при клике элемент выделяется и сразу сбрасывается.
Еще есть идея при клике как-то программно посылать Qt::ControlModifier, но как это сделать я не знаю.

Подскажите что-нибудь...


Интересная задачка.
Проблема тут состоит в следующем - При установке выбранного элемента в позицию "Включен" или "Выключен" запускается сигнал сного что и дает Ваш результат. Задача - остановить его от второго изменения.

Решил следующим образом - 
*.h
Код

public clots:
    void testSlot(QListWidgetItem *);

private:
    bool m_itemManuallyChanged;


*.cpp In constructor
Код

    connect(cardsList,SIGNAL(itemChanged(QListWidgetItem*)),this,SLOT(testSlot(QListWidgetItem*)));


*.cpp 
Код

void MainWindow::testSlot(QListWidgetItem * item) {
    if(m_itemManuallyChanged == false) {
        m_itemManuallyChanged = true;
        if (item->isSelected()) {
            item->setSelected(false);
        } else {
            item->setSelected(true);
        }

    } else
        m_itemManuallyChanged = false;
}


Надеюсь поможет.



Это сообщение отредактировал(а) RedDigger - 25.9.2010, 01:15
PM MAIL Skype   Вверх
Amp
Дата 25.9.2010, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



QAbstractItemView::MultiSelection под описанное должен подойти.
PM MAIL   Вверх
RedDigger
Дата 25.9.2010, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист



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

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



Цитата(Amp @ 25.9.2010,  10:01)
QAbstractItemView::MultiSelection под описанное должен подойти.

В том то и дело что при установке его в положение Qt::MultiSelection придется выбирать разные элементы через контрол, как и было описано как проблема которую надо обойти в постановке вопроса.
PM MAIL Skype   Вверх
Amp
Дата 26.9.2010, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(RedDigger @  25.9.2010,  13:06 Найти цитируемый пост)
В том то и дело что при установке его в положение Qt::MultiSelection придется выбирать разные элементы через контрол, как и было описано как проблема которую надо обойти в постановке вопроса. 

Сейчас специально запустил дизайнер, кинул QListWidgetm выставил Qt::MultiSelection - спокойно выбираю разные айтемы без зажатого ctrl.
PM MAIL   Вверх
RedDigger
Дата 26.9.2010, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист



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

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



Цитата(Amp @ 26.9.2010,  19:27)
Цитата(RedDigger @  25.9.2010,  13:06 Найти цитируемый пост)
В том то и дело что при установке его в положение Qt::MultiSelection придется выбирать разные элементы через контрол, как и было описано как проблема которую надо обойти в постановке вопроса. 

Сейчас специально запустил дизайнер, кинул QListWidgetm выставил Qt::MultiSelection - спокойно выбираю разные айтемы без зажатого ctrl.

Amp Прости.. Проверил сам.. видимо запарился.. спать надо больше.. 

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

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

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


 




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


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

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