Skip to content

Instantly share code, notes, and snippets.

@pamaury
Created December 16, 2013 15:52
Show Gist options
  • Save pamaury/7989271 to your computer and use it in GitHub Desktop.
Save pamaury/7989271 to your computer and use it in GitHub Desktop.
#include <QWidget>
#include <QApplication>
#include <QFileDialog>
#include <QMessageBox>
#include <QCloseEvent>
#include <QDebug>
#include <QVBoxLayout>
#include "mainwindow.h"
MainWindow::MainWindow()
{
QWidget *central = new QWidget;
setCentralWidget(central);
QVBoxLayout *v_layout = new QVBoxLayout(central);
QHBoxLayout *root_layout = new QHBoxLayout();
m_root_line = new QLineEdit;
m_root_line->setReadOnly(true);
m_root_edit = new QPushButton("Change");
root_layout->addWidget(m_root_line);
root_layout->addWidget(m_root_edit);
m_show_hidden = new QCheckBox("Show hidden");
m_tree = new QTreeView();
m_copy_button = new QPushButton("Copy");
v_layout->addLayout(root_layout);
v_layout->addWidget(m_show_hidden);
v_layout->addWidget(m_tree);
v_layout->addWidget(m_copy_button);
m_model = new MyFileSystemView;
m_tree->setModel(m_model);
setRoot(QDir::homePath());
setShowHidden(false);
connect(m_root_edit, SIGNAL(clicked()), this, SLOT(onChangeRoot()));
connect(m_show_hidden, SIGNAL(stateChanged(int)), this, SLOT(onShowHidden(int)));
resize(640, 480);
}
void MainWindow::onChangeRoot()
{
QFileDialog *fd = new QFileDialog(this);
fd->setFileMode(QFileDialog::Directory);
fd->setOption(QFileDialog::ShowDirsOnly, true);
fd->setDirectory(m_root_line->text());
if(fd->exec())
{
QStringList filenames = fd->selectedFiles();
setRoot(filenames[0]);
}
}
void MainWindow::onShowHidden(int val)
{
setShowHidden(val == Qt::Checked);
}
void MainWindow::setShowHidden(bool show)
{
QDir::Filters filt = QDir::Dirs | QDir::AllDirs | QDir::Files | QDir::NoDotAndDotDot;
if(show)
filt |= QDir::Hidden;
m_model->setFilter(filt);
}
void MainWindow::setRoot(const QString& path)
{
m_root_line->setText(path);
m_tree->setRootIndex(m_model->setRootPath(path));
}
void MainWindow::closeEvent(QCloseEvent *event)
{
event->accept();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment