init commit
This commit is contained in:
commit
fe1530fb97
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
# User files
|
||||||
|
*.user
|
3
README.md
Normal file
3
README.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
This is a toy project, just for testing QColumnView for file browsing.
|
||||||
|
|
||||||
|
This project is NOT recommended to use.
|
11
main.cpp
Normal file
11
main.cpp
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
#include "mainwindow.h"
|
||||||
|
|
||||||
|
#include <QApplication>
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
QApplication a(argc, argv);
|
||||||
|
MainWindow w;
|
||||||
|
w.show();
|
||||||
|
return a.exec();
|
||||||
|
}
|
79
mainwindow.cpp
Normal file
79
mainwindow.cpp
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
#include "mainwindow.h"
|
||||||
|
#include "ui_mainwindow.h"
|
||||||
|
|
||||||
|
#include "statusbarwidget.h"
|
||||||
|
|
||||||
|
#include <QFileSystemModel>
|
||||||
|
|
||||||
|
MainWindow::MainWindow(QWidget *parent)
|
||||||
|
: QMainWindow(parent)
|
||||||
|
, ui(new Ui::MainWindow)
|
||||||
|
, m_fsmodel(new QFileSystemModel)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
ui->cdUpButton->setIcon(qApp->style()->standardIcon(QStyle::SP_FileDialogToParent));
|
||||||
|
|
||||||
|
m_fsmodel->setRootPath("");
|
||||||
|
ui->columnView->setModel(m_fsmodel);
|
||||||
|
ui->listView->setModel(m_fsmodel);
|
||||||
|
ui->treeView->setModel(m_fsmodel);
|
||||||
|
|
||||||
|
ui->treeTable->setModel(m_fsmodel);
|
||||||
|
ui->treeTable->setItemsExpandable(false);
|
||||||
|
ui->treeTable->setRootIsDecorated(false);
|
||||||
|
|
||||||
|
ui->treeView->hideColumn(1);
|
||||||
|
ui->treeView->hideColumn(2);
|
||||||
|
ui->treeView->hideColumn(3);
|
||||||
|
|
||||||
|
StatusbarWidget * sb = new StatusbarWidget();
|
||||||
|
ui->statusbar->addPermanentWidget(sb);
|
||||||
|
connect(sb, &StatusbarWidget::requestMode, this, [this](int mode){
|
||||||
|
ui->stackedWidget->setCurrentIndex(mode);
|
||||||
|
});
|
||||||
|
|
||||||
|
connect(ui->listView, &QAbstractItemView::doubleClicked, this, &MainWindow::viewGotoModelIndex);
|
||||||
|
connect(ui->treeTable, &QAbstractItemView::doubleClicked, this, &MainWindow::viewGotoModelIndex);
|
||||||
|
connect(ui->columnView, &QAbstractItemView::clicked, this, &MainWindow::viewGotoModelIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
MainWindow::~MainWindow()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::viewGotoModelIndex(const QModelIndex &index)
|
||||||
|
{
|
||||||
|
if (!m_fsmodel->isDir(index)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ui->listView->setRootIndex(index);
|
||||||
|
ui->treeTable->setRootIndex(index);
|
||||||
|
|
||||||
|
QItemSelectionModel::SelectionFlags flags = QItemSelectionModel::Current;
|
||||||
|
// if (columnClicked->selectionModel()->isSelected(index))
|
||||||
|
// flags |= QItemSelectionModel::Select;
|
||||||
|
ui->columnView->selectionModel()->setCurrentIndex(index, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::on_treeView_clicked(const QModelIndex &index)
|
||||||
|
{
|
||||||
|
if (!m_fsmodel->isDir(index)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ui->listView->setRootIndex(index);
|
||||||
|
ui->treeTable->setRootIndex(index);
|
||||||
|
ui->columnView->setRootIndex(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::on_cdUpButton_clicked()
|
||||||
|
{
|
||||||
|
const QModelIndex &idx = ui->listView->rootIndex();
|
||||||
|
if (!idx.parent().isValid()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
viewGotoModelIndex(idx.parent());
|
||||||
|
}
|
31
mainwindow.h
Normal file
31
mainwindow.h
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
#ifndef MAINWINDOW_H
|
||||||
|
#define MAINWINDOW_H
|
||||||
|
|
||||||
|
#include <QMainWindow>
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
namespace Ui { class MainWindow; }
|
||||||
|
class QFileSystemModel;
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
class MainWindow : public QMainWindow
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
MainWindow(QWidget *parent = nullptr);
|
||||||
|
~MainWindow();
|
||||||
|
|
||||||
|
void viewGotoModelIndex(const QModelIndex &index);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void on_treeView_clicked(const QModelIndex &index);
|
||||||
|
|
||||||
|
void on_cdUpButton_clicked();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::MainWindow *ui;
|
||||||
|
|
||||||
|
QFileSystemModel * m_fsmodel;
|
||||||
|
};
|
||||||
|
#endif // MAINWINDOW_H
|
156
mainwindow.ui
Normal file
156
mainwindow.ui
Normal file
|
@ -0,0 +1,156 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>MainWindow</class>
|
||||||
|
<widget class="QMainWindow" name="MainWindow">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>1153</width>
|
||||||
|
<height>673</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>MainWindow</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="centralwidget">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="cdUpButton">
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QSplitter" name="splitter">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<widget class="QTreeView" name="treeView">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
|
<horstretch>1</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="baseSize">
|
||||||
|
<size>
|
||||||
|
<width>200</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="headerHidden">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QStackedWidget" name="stackedWidget">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>3</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="lineWidth">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="currentIndex">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="page">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QColumnView" name="columnView"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="page_2">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QListView" name="listView">
|
||||||
|
<property name="movement">
|
||||||
|
<enum>QListView::Snap</enum>
|
||||||
|
</property>
|
||||||
|
<property name="viewMode">
|
||||||
|
<enum>QListView::IconMode</enum>
|
||||||
|
</property>
|
||||||
|
<property name="uniformItemSizes">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="page_3">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QTreeView" name="treeTable"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QMenuBar" name="menubar">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>1153</width>
|
||||||
|
<height>25</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QStatusBar" name="statusbar"/>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
33
pineapple-files.pro
Normal file
33
pineapple-files.pro
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
QT += core gui
|
||||||
|
|
||||||
|
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||||
|
|
||||||
|
CONFIG += c++11
|
||||||
|
|
||||||
|
# The following define makes your compiler emit warnings if you use
|
||||||
|
# any Qt feature that has been marked deprecated (the exact warnings
|
||||||
|
# depend on your compiler). Please consult the documentation of the
|
||||||
|
# deprecated API in order to know how to port your code away from it.
|
||||||
|
DEFINES += QT_DEPRECATED_WARNINGS
|
||||||
|
|
||||||
|
# You can also make your code fail to compile if it uses deprecated APIs.
|
||||||
|
# In order to do so, uncomment the following line.
|
||||||
|
# You can also select to disable deprecated APIs only up to a certain version of Qt.
|
||||||
|
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||||
|
|
||||||
|
SOURCES += \
|
||||||
|
main.cpp \
|
||||||
|
mainwindow.cpp \
|
||||||
|
statusbarwidget.cpp
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
mainwindow.h \
|
||||||
|
statusbarwidget.h
|
||||||
|
|
||||||
|
FORMS += \
|
||||||
|
mainwindow.ui
|
||||||
|
|
||||||
|
# Default rules for deployment.
|
||||||
|
qnx: target.path = /tmp/$${TARGET}/bin
|
||||||
|
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
||||||
|
!isEmpty(target.path): INSTALLS += target
|
30
statusbarwidget.cpp
Normal file
30
statusbarwidget.cpp
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
#include "statusbarwidget.h"
|
||||||
|
|
||||||
|
#include <QPushButton>
|
||||||
|
#include <QVBoxLayout>
|
||||||
|
|
||||||
|
StatusbarWidget::StatusbarWidget(QWidget *parent) : QWidget(parent)
|
||||||
|
{
|
||||||
|
QHBoxLayout * layout = new QHBoxLayout;
|
||||||
|
this->setLayout(layout);
|
||||||
|
layout->setMargin(0);
|
||||||
|
|
||||||
|
QPushButton * m_columnsModeBtn = new QPushButton("Columns");
|
||||||
|
connect(m_columnsModeBtn, &QPushButton::clicked, this, [this](){
|
||||||
|
Q_EMIT requestMode(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
QPushButton * m_listModeBtn = new QPushButton("List");
|
||||||
|
connect(m_listModeBtn, &QPushButton::clicked, this, [this](){
|
||||||
|
Q_EMIT requestMode(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
QPushButton * m_detailsModeBtn = new QPushButton("Details");
|
||||||
|
connect(m_detailsModeBtn, &QPushButton::clicked, this, [this](){
|
||||||
|
Q_EMIT requestMode(2);
|
||||||
|
});
|
||||||
|
|
||||||
|
layout->addWidget(m_columnsModeBtn);
|
||||||
|
layout->addWidget(m_listModeBtn);
|
||||||
|
layout->addWidget(m_detailsModeBtn);
|
||||||
|
}
|
19
statusbarwidget.h
Normal file
19
statusbarwidget.h
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
#ifndef STATUSBARWIDGET_H
|
||||||
|
#define STATUSBARWIDGET_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
|
class StatusbarWidget : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit StatusbarWidget(QWidget *parent = nullptr);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void requestMode(int mode);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // STATUSBARWIDGET_H
|
Loading…
Reference in New Issue
Block a user