Seite 1 von 1
Datei aus QTreeView heraus öffnen
Verfasst: 30. Dezember 2010 15:39
von Joont
Hallo,
ich habe da mal wieder ein Problem bei dem ich selbst nicht auf die Lösung komme. Nun aber vorweg ein paar Infos. Ich habe ein DockWidget erstellt in dem ich mir meine Laufwerke anzeigen lasse. Jetzt möchte ich gerne, das wenn ich aus diesem DockWidget eine .txt datei auswähle, das der inhalt in einem extra Widget geöffnet wird und ich mir dann den Code aus der Datei herausholen kann. Wie kann ich das anstellen das ich aus dem QTreeView eine Datei öffnen kann. Hier mal der code, falls er benötigt wird.
Code: Alles auswählen
void MyEditor::snippet()
{
QDockWidget *snippet = new QDockWidget(tr("Snippets"), this);
snippet->setAllowedAreas(Qt::RightDockWidgetArea | Qt::LeftDockWidgetArea | Qt::BottomDockWidgetArea | Qt::TopDockWidgetArea);
QFileSystemModel *model = new QFileSystemModel;
model->setRootPath(QDir::currentPath());
QTreeView *tree = new QTreeView();
tree->setModel(model);
snippet->setWidget(tree);
addDockWidget(Qt::LeftDockWidgetArea, snippet);
}
Verfasst: 30. Dezember 2010 16:20
von franzf
Über die Doku lässt sich sowas immer recht schnell selber rausfinden.
Anclicken == GUI -> SIGNAL im QTreeView suchen. Gibts keins. Basisklasse = QAbstractItemView -> Jippie: SIGNAL clicked (const QModelIndex&).
Also brauchen wir einen SLOT mit einem QModelIndex als Parameter - dort muss Code rein, der ausgeführt werden soll, wenn im TreeView was angeclickt wurde.
Nächster Schritt: QFileSystemModel nach "file" durchwurschteln -> Bamm!
Code: Alles auswählen
QIcon fileIcon ( const QModelIndex & index ) const
QFileInfo fileInfo ( const QModelIndex & index ) const
QString fileName ( const QModelIndex & index ) const
QString filePath ( const QModelIndex & index ) const
Jetzt brauchst du nur noch das File zu laden - das überlass ich dir, mit QFile &co in der Doku kommst du recht weit

Verfasst: 30. Dezember 2010 19:05
von Joont
Alles klar. Sobald ich heute Abend wieder Zeit habe werde ich mich erneut an die Arbeit machen. danke dir.
Verfasst: 31. Dezember 2010 17:48
von Joont
Hey,
ich habe letzte Nacht noch mal mein Buch durchstöbert und habe da etwas gefunden mit dem ich grade versuche mein Ziel zu erreichen. Ich bin soweit das ich den Datei namen in einem Tab öffnen kann. Jedoch komme ich aber nicht drauf was ich vergessen habe oder Falsch mache das der Text noch fehlt. Ich hoffe ihr könnt mir da noch mal weiterhelfen.
Code: Alles auswählen
void MyEditor::snippet()
{
QDockWidget *snippet = new QDockWidget(tr("Snippets"), this);
snippet->setAllowedAreas(Qt::RightDockWidgetArea | Qt::LeftDockWidgetArea | Qt::BottomDockWidgetArea | Qt::TopDockWidgetArea);
model = new QDirModel;
model->setReadOnly(true);
model->setSorting(QDir::DirsFirst | QDir::Name);
treeView = new QTreeView;
treeView->setModel(model);
treeView->header()->setClickable(true);
connect(treeView, SIGNAL( doubleClicked(const QModelIndex&) ),
this, SLOT( getFile(const QModelIndex&) ) );
snippet->setWidget(treeView);
addDockWidget(Qt::LeftDockWidgetArea, snippet);
}
void MyEditor::getFile(const QModelIndex &index)
{
if(index.isValid())
if(model->fileInfo(index).isFile())
{
QTextEdit* textEdit = new QTextEdit;
QString fileName = model->fileName(index);
if (!fileName.isEmpty()) {
QFile file(fileName);
if (file.open(QFile::ReadOnly | QFile::Text))
textEdit->insertPlainText(file.readAll());
tab->addTab(textEdit, fileName);
tab->setCurrentWidget(textEdit);
}
}
}
Verfasst: 2. Januar 2011 18:33
von Joont
Hey,
also ich habe es grade eben gelöst. Ich habe meinen Fehler gefunen und behoben. So wie das Script jetzt ist funktioniert es. Hier noch mal für Nachfolger:
Code: Alles auswählen
void MyEditor::snippet()
{
QDockWidget *snippet = new QDockWidget(tr("Snippets"), this);
snippet->setAllowedAreas(Qt::RightDockWidgetArea | Qt::LeftDockWidgetArea | Qt::BottomDockWidgetArea | Qt::TopDockWidgetArea);
model = new QDirModel;
model->setReadOnly(true);
model->setSorting(QDir::DirsFirst | QDir::Name);
treeView = new QTreeView;
treeView->setModel(model);
treeView->header()->setClickable(true);
connect(treeView, SIGNAL( doubleClicked(const QModelIndex&) ),
this, SLOT( getFile(const QModelIndex&) ) );
snippet->setWidget(treeView);
addDockWidget(Qt::LeftDockWidgetArea, snippet);
statusBar()->showMessage( tr("Verzeichnisse wurden geladen"), 5000 );
}
void MyEditor::getFile(const QModelIndex &index)
{
if(index.isValid())
{
//Verzeichnisse
}
if(model->fileInfo(index).isFile())
{
QTextEdit* textEdit = new QTextEdit;
QString fileName = model->filePath(index);
if (!fileName.isEmpty()) {
QFile file(fileName);
if (file.open(QFile::ReadOnly | QFile::Text))
{
textEdit->insertPlainText(file.readAll());
tab->addTab(textEdit, fileName);
tab->setCurrentWidget(textEdit);
highlighter = new Highlighter(textEdit->document());
statusBar()->showMessage( tr("Datei erfolgreich geöffnet"), 5000 );
}
}
}
}