kod aplikacji https://github.com/mariuszmaximus/ListView001
Mam wektor zawierający elementy typu "OneFile"
Dla użytkownika wyświetlam wartości z pola "nameOnScreen"
Użytkownik wybiera plik z listy i naciska ENTER
Jak odczytać indeks zaznaczonego elementu w QListView ? Chciałbym dla wybranego elementu odczytać wartość "filename"
Czy też nie tedy droga i muszę użyć czegoś innego zamiast "QStringListModel" ?
//
struct OneFile{
QString nameOnScreen;
QString filename;
OneFile(QString _nameOnScreen, QString _filename )
{
nameOnScreen = _nameOnScreen;
filename = _filename;
}
};
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::Widget *ui;
std::vector <OneFile> files;
QStringListModel *model;
protected:
void keyPressEvent(QKeyEvent *event);
};
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
files.push_back( OneFile("opis1","plik1.txt") );
files.push_back( OneFile("opis2","plik2.txt") );
files.push_back( OneFile("opis3","plik3.txt") );
// Create model
model = new QStringListModel(this);
// Make data
QStringList List;
// Using a for loop with index
for (std::size_t i = 0; i < files.size(); ++i)
{
//List.append(cfg->probes[i].c_str());
List.append(files[i].nameOnScreen);
}
// Populate our model
model->setStringList(List);
// Glue model and view together
ui->listView->setModel(model);
}
Widget::~Widget()
{
delete ui;
}
void Widget::keyPressEvent(QKeyEvent *event)
{
if (event->key()==Qt::Key_Return)
{
QModelIndexList list =ui->listView->selectionModel()->selectedIndexes();
QStringList slist;
foreach(const QModelIndex &index, list){
slist.append( index.data(Qt::DisplayRole ).toString());
}
qDebug() << slist.join(",");
}
}