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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос об активности элементов списка (StringList).  (Прочитано 3849 раз)
Dragon
Гость
« : Май 21, 2010, 11:54 »

Есть список QStringList (data). Есть модель (model), в которую он выводится.
Для того чтобы по клику на элементе списка происходило какое-либо действие (открывалось окно, открывался файл, происходил поиск по значению элемента в файле и т.д.) нужно создавать класс-потомок от списка или есть какие-то готовые решения?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Май 21, 2010, 12:02 »

ловить сигнал clicked
Записан
Dragon
Гость
« Ответ #2 : Май 21, 2010, 12:17 »

Вот к примеру:
Код
C++ (Qt)
QStringList data;
data << "1" << "2" << "3";
 
QStringListModel* model = new QStringListModel;
model->setStringList(data);
 
QListView* listView = new QListView;
listView->setModel(model);

Чтобы вызвать действие в таком случае, то нужно:
Код
C++ (Qt)
connect(listView, clicked(QModelIndex), this, SLOT(mySlot(QModelIndex));

В QModelIndex содержится номер элемента списка? И соответственно в слоте нужно играться с этим номером чтобы происходили действия различной сложности?
Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #3 : Май 21, 2010, 12:39 »

QModelIndex будет содержать строку и столбец вызванного элемента. row(), column(). Дальше делаете, все что захотите. Чтобы получить данные этого элемента есть функция data(role), по умолчанию Qt::DisplayRole, т.е. показ данных.
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
Dragon
Гость
« Ответ #4 : Май 21, 2010, 13:31 »

Что я примерно хочу сделать. Есть список слов / предложений (огромный  список - 100, 1000, 10000 элементов... не имеет нзачения), которые хранятся, скажем в txt файле (может даже проще в базу данных поместить это все... этот момент я еще не обдумывал). По нажатию на какое-либо слово/предложение выводится список других слов (в эту же модель, или возможно в новом окне), которые относятся к этому элементу. Можно провести аналогию с диалогами в компьютерных играх. И я хочу выводить в это же окно результаты.

Правильно ли я понимаю, что для решения данной задачи будет использваться данный слот?
Т.к. это список, то в QModelIndex будут передаваться значения: column = 1, row = номер_слова/предложения. А для того чтобы найти соответствие (данные, относящиеся к тому или иному элементу (слову)) нужно использовать роли?
Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #5 : Май 21, 2010, 14:53 »

Dragon, почитай мануал о Model/View.
Цитировать
в эту же модель
тогда в тот view, в котором был кликнут элемент будут выведены новые данные.
Нужно создать отдельную модель для этого случая. Либо сделать деревом(но наверное в твоем случае это не подойдет).

Цитировать
нужно использовать роли?
Цитировать
The roles are used by the view to indicate to the model which type of data it needs.
- ассистент
Роли тут не при чем. Откуда ты связанные слова брать будешь? Для этого случая я бы юзал БД. SQLITE например можно.
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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