Skip to content

Commit 112c8d2

Browse files
committed
Plugins::FileTransfer: add local file browser
1 parent 5282717 commit 112c8d2

4 files changed

Lines changed: 169 additions & 3 deletions

File tree

Plugins/FileTransfer/FrmFileTransfer.cpp

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,63 @@
77
CFrmFileTransfer::CFrmFileTransfer(QWidget *parent)
88
: QWidget(parent)
99
, ui(new Ui::CFrmFileTransfer)
10+
, m_pModelLocalDir(new QFileSystemModel(this))
11+
, m_pModelLocalFile(new QFileSystemModel(this))
1012
{
13+
bool check = false;
1114
ui->setupUi(this);
15+
16+
m_pModelLocalDir->setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
17+
ui->tvLocal->setModel(m_pModelLocalDir);
18+
check = connect(ui->tvLocal, &QTreeView::clicked,
19+
this, &CFrmFileTransfer::slotLocalClicked);
20+
Q_ASSERT(check);
21+
m_pModelLocalDir->setRootPath("");
22+
ui->tvLocal->setRootIndex(m_pModelLocalDir->index(""));
23+
ui->tvLocal->setHeaderHidden(true);
24+
// 注意:必须在 setModel 之后才会生效
25+
ui->tvLocal->header()->hideSection(1);
26+
ui->tvLocal->header()->hideSection(2);
27+
ui->tvLocal->header()->hideSection(3);
28+
29+
m_pModelLocalFile->setFilter(QDir::Files);
30+
ui->tabLocal->setModel(m_pModelLocalFile);
31+
ui->tabLocal->setShowGrid(false);
32+
ui->tabLocal->verticalHeader()->hide();
33+
ui->tabLocal->horizontalHeader()->setSectionResizeMode(
34+
QHeaderView::ResizeToContents);
1235
}
1336

1437
CFrmFileTransfer::~CFrmFileTransfer()
1538
{
1639
delete ui;
1740
}
41+
42+
int CFrmFileTransfer::SetLocalRoot(const QString &root)
43+
{
44+
auto index = m_pModelLocalDir->setRootPath(root);
45+
ui->tvLocal->setRootIndex(index);
46+
return 0;
47+
}
48+
49+
QString CFrmFileTransfer::GetLocalRoot() const
50+
{
51+
return m_pModelLocalDir->rootPath();
52+
}
53+
54+
void CFrmFileTransfer::slotLocalClicked(const QModelIndex &index)
55+
{
56+
QString szPath = m_pModelLocalDir->filePath(index);
57+
if(-1 == ui->cbLocal->findText(szPath))
58+
ui->cbLocal->addItem(szPath);
59+
ui->cbLocal->setCurrentText(szPath);
60+
QModelIndex idx = m_pModelLocalFile->setRootPath(szPath);
61+
ui->tabLocal->setRootIndex(idx);
62+
}
63+
64+
void CFrmFileTransfer::on_cbLocal_currentTextChanged(const QString &text)
65+
{
66+
auto idx = m_pModelLocalDir->index(text);
67+
ui->tvLocal->setCurrentIndex(idx);
68+
slotLocalClicked(idx);
69+
}

Plugins/FileTransfer/FrmFileTransfer.h

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#pragma once
44

55
#include <QWidget>
6+
#include <QFileSystemModel>
67

78
namespace Ui {
89
class CFrmFileTransfer;
@@ -14,8 +15,21 @@ class CFrmFileTransfer : public QWidget
1415

1516
public:
1617
explicit CFrmFileTransfer(QWidget *parent = nullptr);
17-
~CFrmFileTransfer();
18+
virtual ~CFrmFileTransfer();
19+
20+
private:
21+
//! Set local root path
22+
int SetLocalRoot(const QString &root);
23+
//! Get local root path
24+
[[nodiscard]] QString GetLocalRoot() const;
25+
26+
private Q_SLOTS:
27+
void slotLocalClicked(const QModelIndex &index);
28+
29+
void on_cbLocal_currentTextChanged(const QString &text);
1830

1931
private:
2032
Ui::CFrmFileTransfer *ui;
33+
QFileSystemModel* m_pModelLocalDir;
34+
QFileSystemModel* m_pModelLocalFile;
2135
};

Plugins/FileTransfer/FrmFileTransfer.ui

Lines changed: 99 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,110 @@
66
<rect>
77
<x>0</x>
88
<y>0</y>
9-
<width>400</width>
10-
<height>300</height>
9+
<width>491</width>
10+
<height>295</height>
1111
</rect>
1212
</property>
1313
<property name="windowTitle">
1414
<string>Form</string>
1515
</property>
16+
<layout class="QGridLayout" name="gridLayout">
17+
<item row="0" column="0">
18+
<layout class="QVBoxLayout" name="verticalLayout_2">
19+
<item>
20+
<layout class="QHBoxLayout" name="horizontalLayout">
21+
<item>
22+
<widget class="QLabel" name="label">
23+
<property name="text">
24+
<string>Local:</string>
25+
</property>
26+
</widget>
27+
</item>
28+
<item>
29+
<widget class="QComboBox" name="cbLocal">
30+
<property name="sizePolicy">
31+
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
32+
<horstretch>0</horstretch>
33+
<verstretch>0</verstretch>
34+
</sizepolicy>
35+
</property>
36+
<property name="editable">
37+
<bool>true</bool>
38+
</property>
39+
</widget>
40+
</item>
41+
</layout>
42+
</item>
43+
<item>
44+
<widget class="QTreeView" name="tvLocal">
45+
<property name="sizePolicy">
46+
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
47+
<horstretch>0</horstretch>
48+
<verstretch>0</verstretch>
49+
</sizepolicy>
50+
</property>
51+
</widget>
52+
</item>
53+
<item>
54+
<widget class="QTableView" name="tabLocal"/>
55+
</item>
56+
</layout>
57+
</item>
58+
<item row="0" column="1">
59+
<layout class="QVBoxLayout" name="verticalLayout">
60+
<item>
61+
<layout class="QHBoxLayout" name="horizontalLayout_2">
62+
<item>
63+
<widget class="QLabel" name="label_2">
64+
<property name="text">
65+
<string>Remote:</string>
66+
</property>
67+
</widget>
68+
</item>
69+
<item>
70+
<widget class="QComboBox" name="cbRemote">
71+
<property name="sizePolicy">
72+
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
73+
<horstretch>0</horstretch>
74+
<verstretch>0</verstretch>
75+
</sizepolicy>
76+
</property>
77+
<property name="editable">
78+
<bool>true</bool>
79+
</property>
80+
</widget>
81+
</item>
82+
</layout>
83+
</item>
84+
<item>
85+
<widget class="QTreeView" name="tvRemote"/>
86+
</item>
87+
<item>
88+
<widget class="QTableWidget" name="tabRemote"/>
89+
</item>
90+
</layout>
91+
</item>
92+
<item row="1" column="0" colspan="2">
93+
<widget class="QTabWidget" name="tabWidget">
94+
<property name="tabPosition">
95+
<enum>QTabWidget::TabPosition::South</enum>
96+
</property>
97+
<property name="currentIndex">
98+
<number>1</number>
99+
</property>
100+
<widget class="QWidget" name="tab">
101+
<attribute name="title">
102+
<string>Tab 1</string>
103+
</attribute>
104+
</widget>
105+
<widget class="QWidget" name="tab_2">
106+
<attribute name="title">
107+
<string>Tab 2</string>
108+
</attribute>
109+
</widget>
110+
</widget>
111+
</item>
112+
</layout>
16113
</widget>
17114
<resources/>
18115
<connections/>

Plugins/FileTransfer/PluginFileTransfer.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
// Copyright Copyright (c) Kang Lin studio, All Rights Reserved
22
// Author Kang Lin <kl222@126.com>
33

4+
#include <QApplication>
5+
#include <QStyle>
46
#include <QLoggingCategory>
57
#include "PluginFileTransfer.h"
68
#include "OperateFileTransfer.h"
@@ -51,6 +53,7 @@ const QString CPluginFileTransfer::Version() const
5153
const QIcon CPluginFileTransfer::Icon() const
5254
{
5355
return QIcon::fromTheme("system-file-manager");
56+
//return QApplication::style()->standardIcon(QStyle::SP_FileIcon);
5457
}
5558

5659
COperate *CPluginFileTransfer::OnCreateOperate(const QString &szId)

0 commit comments

Comments
 (0)