Russian Qt Forum

Qt => Model-View (MV) => Тема начата: Dragon от Май 21, 2010, 11:54



Название: Вопрос об активности элементов списка (StringList).
Отправлено: Dragon от Май 21, 2010, 11:54
Есть список QStringList (data). Есть модель (model), в которую он выводится.
Для того чтобы по клику на элементе списка происходило какое-либо действие (открывалось окно, открывался файл, происходил поиск по значению элемента в файле и т.д.) нужно создавать класс-потомок от списка или есть какие-то готовые решения?


Название: Re: Вопрос об активности элементов списка (StringList).
Отправлено: Авварон от Май 21, 2010, 12:02
ловить сигнал clicked


Название: Re: Вопрос об активности элементов списка (StringList).
Отправлено: Dragon от Май 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 содержится номер элемента списка? И соответственно в слоте нужно играться с этим номером чтобы происходили действия различной сложности?


Название: Re: Вопрос об активности элементов списка (StringList).
Отправлено: kibsoft от Май 21, 2010, 12:39
QModelIndex будет содержать строку и столбец вызванного элемента. row(), column(). Дальше делаете, все что захотите. Чтобы получить данные этого элемента есть функция data(role), по умолчанию Qt::DisplayRole, т.е. показ данных.


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

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


Название: Re: Вопрос об активности элементов списка (StringList).
Отправлено: kibsoft от Май 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 например можно.