Capturar el Path al hacer Click en un QTreeView

Saludos, le agradecería a quien me pueda guiar con la siguiente situación. Tengo un objeto QTreeView donde cargo mi directorio principal. Necesito capturar el path en el momento en que hago click. He leído por días varios foros, y toda la documentación, y comprendo que debo hacerlo con un QModelIndex. El problema es que por más que trato y cambio código no logro comprender en que fallo.
Uso el siguiente código para realizar la conexión

// En este evento realizo la conexión
 connect(ui->trvDirectorio,SIGNAL(clicked (QModelIndex)),this,SLOT(filaclicked(QModelIndex)));
 
//Así cargo el QTreeView:
 ui->trvDirectorio->setModel(modelodirectorio);
 modelodirectorio->setSorting(QDir::DirsFirst | QDir::IgnoreCase | QDir::Name);
 ui->trvDirectorio->setRootIndex(modelodirectorio->index("/home/"));
 
//Y aquí trato de abrir la función filaclicked que me obtiene el path:
<code> void frmPrincipal::filaclicked (QModelIndex indice) {}
 
El problema es que no comprendo lo que debo poner dentro de esta clase.
 
Gracias de antemano.

filePath

porque no pruebas con la funcion QString QDirModel::filePath (const QModelIndex & index )
Segun la documentacion esto te devolveria el path del indice que tu le pasa como parametro.
Te quedaria algo asi:

void frmPrincipal::filaclicked (QModelIndex indice)
{
   QString path = ui->trvDirectorio->filePath(indice);
}

Espero que te sirva.
Saludos.

Hice lo siguiente

Hice lo siguiente:

 void frmPrincipal::filaclicked (QModelIndex indice)
{
    QString indiceactual = modelodirectorio->filePath(indice);
    ui->descripcionlineEdit->setText(indiceactual);
    QMessageBox::warning(this, tr("Path"),indiceactual, QMessageBox::Ok);
}
 
// En el header tengo lo siguiente:
 
private:
    QDirModel *modelodirectorio;
public slots:
    void filaclicked (QModelIndex indice);

A mi tambien

Hice una pequeña aplicacion para probar y funciono sin ploblemas
Te paso el codigo, a lo mejor te sirve:
Archivo .h

class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
public slots:
    void seleccion(const QModelIndex &index);
private:
    Ui::MainWindow *ui;
    QDirModel * modelo;
};

El .cpp (version reducida, sin el destructor)
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->treeView, SIGNAL(clicked(QModelIndex)), this, SLOT(seleccion(QModelIndex)));
    modelo = new QDirModel();
    ui->treeView->setModel(modelo);
 
}
 
void MainWindow::seleccion(const QModelIndex &index)
{
   ui->lineEdit->setText(modelo->filePath(index));
}

Espero que encuentres tu problema
Saludos

Excelente GRACIAS

Excelente, mil gracias, funciona a la perfección, tenía un par de errores a la hora de declarar los punteros, y la definición de las variables en el Header, pienso ser fiel seguidor de este foro, estoy comenzando en el mundo del QT y tengo muchas dudas pero poco a poco las voy resolviendo. De verdad MUCHAS GRACIAS.

A mí me funciona

He copiado el código que has presentado, y a mí me funciona y me devuelve el path de los archivos sobre los que hago click. Revisa el resto de tu código, porque quizás no hayas llamado a la función que conecta el slot filaclicked con la señal del treeView.

¡Un saludo!

Sobre QDirModel :)

Sí, funciona sobre QDirModel, no sobre QTreeView; el código tendría que ser el siguiente:

void frmPrincipal::filaClicked(QModelIndex &indice)
{
 QString path= modelodirectorio->filePath(indice);
 
 ///...
 
}

Que vamos con prisas y no nos fijamos :D

¡Un saludo!

jeje

Perdon, pequeño error de copy paste

Gracias por responder tan rápido

Muchas gracias por responder tan pronto, solo que aún no me funciona. Al hacer el click, el path viene vacío. Alguna idea...

Anuncios Google