[ notebookFun @ 28.02.2011. 00:42 ] @
Radim u QT creator-u i na formi imam jeda QListView i jedno dugme filmovi. Napravio sam da kada kliknem na dugme filmovi u QListView-u se pojave svi folderi filmova sa neke putanje npr. (C:\FILMOVI).
Kako sad da u QString ucitam ime selektovanog foldera iz QListView-a?

Da pojasnim malo:

Deklarisao sam
QString ime;

Kako sad da smjestim ime selektovano item-a iz QListView-a u QString ime, kad pokrenem neko dugme sa forme da se izvrsi ovo?


Na jednom stranom ircu sam dobio odgovor da prostudiram selectionModel () mada u samom QT manual-u i nema nekih primjera :(
[ glorius @ 28.02.2011. 14:52 ] @
Moj savet je da za proste operacije sa listom koristis QListWidget.
Mozes malo pogledati dokumentaciju QListWidget klase.

Jedan od nacina na koji mozes da napravis funkcionalnost koja ti treba:

Code:


VideoStore::VideoStore()
{
    ui.setupUi(this);

// dodavanje itema
    ui.listWidget->addItem("Naziv Filma 1");
    ui.listWidget->addItem("Naziv Filma 2");
    ui.listWidget->addItem("Naziv Filma 3");
    ui.listWidget->addItem("Naziv Filma 4");

    // kada kliknes na item generise se signal currentItemChanged(QListWidgetItem*,QListWidgetItem*)   - vidi u dokumentaciji
    connect(ui.listWidget, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), this, 
        SLOT(onCurrentItemChanged(QListWidgetItem*,QListWidgetItem*)));
}

void VideoStore::onCurrentItemChanged(QListWidgetItem* current,QListWidgetItem* previous)
{
    // od current itema uzimas text...
    QString movie = current->text();
}

[ notebookFun @ 06.03.2011. 00:04 ] @
Koristio bih QListWidget ali ne znam kako da ucitam sve foldere iz jednog direktorijuma u njega, tj u iteme. Zbog toga sam koristio QListView.


Code:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtGui>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{

ui->setupUi(this);
    QSplitter *splitter = new QSplitter;
    QFileSystemModel *model = new QFileSystemModel;
    model->setRootPath(QDir::currentPath());
    ui->lista_filmova->setModel(model);
    ui->lista_filmova->setRootIndex(model->index("E:\\FILMOVI"));
    QItemSelectionModel *selection = new QItemSelectionModel(model);
    ui->lista_filmova->setSelectionModel(selection);
    splitter->show();







}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_lista_filmova_doubleClicked(QModelIndex index)
{
    //QString naziv;    

}



E sad kako da naziv dobije ime od kliknutog itema???
[ glorius @ 06.03.2011. 16:21 ] @
Code:


void MainWindow::on_lista_filmova_doubleClicked(const QModelIndex& index)
{
    const QAbstractItemModel* pModel = index.model();
    QString naziv = pModel->data(index).toString();
}



QModelIndex ima pointer na model.

QAbstractItemModel::data() je zaduzena za vracanje podataka iz modela tako sto predas index koji interno sadrzi row() i column() selektovanog itema i tako vraca informaciju o selektovanom itemu.

Ovo sve moze u jednom koraku:

Code:


void MainWindow::on_lista_filmova_doubleClicked(const QModelIndex& index)
{
    QString naziv = index.model()->data(index).toString();
}