Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
三雷科技
QT博客案例
提交
0c0c9290
Q
QT博客案例
项目概览
三雷科技
/
QT博客案例
通知
1542
Star
47
Fork
34
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Q
QT博客案例
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
0c0c9290
编写于
4月 27, 2024
作者:
L
leiyuanxiang@uniontech.com
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
添加Qt文件上传案例
上级
50757256
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
317 addition
and
0 deletion
+317
-0
qt_easy/QUploadFile/QUploadFile/.gitignore
qt_easy/QUploadFile/QUploadFile/.gitignore
+73
-0
qt_easy/QUploadFile/QUploadFile/QUploadFile.pro
qt_easy/QUploadFile/QUploadFile/QUploadFile.pro
+23
-0
qt_easy/QUploadFile/QUploadFile/main.cpp
qt_easy/QUploadFile/QUploadFile/main.cpp
+11
-0
qt_easy/QUploadFile/QUploadFile/mainwindow.cpp
qt_easy/QUploadFile/QUploadFile/mainwindow.cpp
+91
-0
qt_easy/QUploadFile/QUploadFile/mainwindow.h
qt_easy/QUploadFile/QUploadFile/mainwindow.h
+42
-0
qt_easy/QUploadFile/QUploadFile/upload_file_manager.cpp
qt_easy/QUploadFile/QUploadFile/upload_file_manager.cpp
+42
-0
qt_easy/QUploadFile/QUploadFile/upload_file_manager.h
qt_easy/QUploadFile/QUploadFile/upload_file_manager.h
+35
-0
未找到文件。
qt_easy/QUploadFile/QUploadFile/.gitignore
0 → 100644
浏览文件 @
0c0c9290
# This file is used to ignore files which are generated
# ----------------------------------------------------------------------------
*~
*.autosave
*.a
*.core
*.moc
*.o
*.obj
*.orig
*.rej
*.so
*.so.*
*_pch.h.cpp
*_resource.rc
*.qm
.#*
*.*#
core
!core/
tags
.DS_Store
.directory
*.debug
Makefile*
*.prl
*.app
moc_*.cpp
ui_*.h
qrc_*.cpp
Thumbs.db
*.res
*.rc
/.qmake.cache
/.qmake.stash
# qtcreator generated files
*.pro.user*
# xemacs temporary files
*.flc
# Vim temporary files
.*.swp
# Visual Studio generated files
*.ib_pdb_index
*.idb
*.ilk
*.pdb
*.sln
*.suo
*.vcproj
*vcproj.*.*.user
*.ncb
*.sdf
*.opensdf
*.vcxproj
*vcxproj.*
# MinGW generated files
*.Debug
*.Release
# Python byte code
*.pyc
# Binaries
# --------
*.dll
*.exe
qt_easy/QUploadFile/QUploadFile/QUploadFile.pro
0 → 100644
浏览文件 @
0c0c9290
QT
+=
core
gui
network
greaterThan
(
QT_MAJOR_VERSION
,
4
)
:
QT
+=
widgets
CONFIG
+=
c
++
11
#
You
can
make
your
code
fail
to
compile
if
it
uses
deprecated
APIs
.
#
In
order
to
do
so
,
uncomment
the
following
line
.
#
DEFINES
+=
QT_DISABLE_DEPRECATED_BEFORE
=
0
x060000
#
disables
all
the
APIs
deprecated
before
Qt
6.0
.
0
SOURCES
+=
\
main
.
cpp
\
mainwindow
.
cpp
\
upload_file_manager
.
cpp
HEADERS
+=
\
mainwindow
.
h
\
upload_file_manager
.
h
#
Default
rules
for
deployment
.
qnx
:
target
.
path
=
/
tmp
/
$$
{
TARGET
}
/
bin
else
:
unix
:
!
android
:
target
.
path
=
/
opt
/
$$
{
TARGET
}
/
bin
!
isEmpty
(
target
.
path
)
:
INSTALLS
+=
target
qt_easy/QUploadFile/QUploadFile/main.cpp
0 → 100644
浏览文件 @
0c0c9290
#include "mainwindow.h"
#include <QApplication>
int
main
(
int
argc
,
char
*
argv
[])
{
QApplication
a
(
argc
,
argv
);
MainWindow
w
;
w
.
show
();
return
a
.
exec
();
}
qt_easy/QUploadFile/QUploadFile/mainwindow.cpp
0 → 100644
浏览文件 @
0c0c9290
#
pragma
execution_character_set
(
"utf-8"
)
#include "mainwindow.h"
#include <QPushButton>
#include <QtWidgets>
#include <QLineEdit>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QFileDialog>
#include <QProgressBar>
#include <QNetworkAccessManager>
#include <QHttpMultiPart>
#include <QHttpPart>
#include <QNetworkRequest>
#include <QFile>
#include <QNetworkReply>
MainWindow
::
MainWindow
(
QWidget
*
parent
)
:
QMainWindow
(
parent
)
,
selectFilePathButton
(
new
QPushButton
(
"选择文件路径"
))
,
uploadButton
(
new
QPushButton
(
"上传"
))
,
filePathEdit
(
new
QLineEdit
())
,
fileLayout
(
new
QHBoxLayout
())
,
mainLayout
(
new
QVBoxLayout
())
,
progressBar
(
new
QProgressBar
())
{
InitUI
();
InitConnect
();
}
MainWindow
::~
MainWindow
()
{
}
void
MainWindow
::
InitUI
()
{
QWidget
*
centerWidget
=
new
QWidget
(
this
);
progressBar
->
hide
();
fileLayout
->
addWidget
(
selectFilePathButton
)
;
fileLayout
->
addWidget
(
filePathEdit
);
mainLayout
->
addLayout
(
fileLayout
);
mainLayout
->
addWidget
(
uploadButton
);
mainLayout
->
addWidget
(
progressBar
);
centerWidget
->
setLayout
(
mainLayout
);
mainLayout
->
addStretch
();
setCentralWidget
(
centerWidget
);
}
void
MainWindow
::
InitConnect
()
{
connect
(
selectFilePathButton
,
&
QPushButton
::
clicked
,
this
,
&
MainWindow
::
slotSelectFilePath
);
connect
(
uploadButton
,
&
QPushButton
::
clicked
,
this
,
&
MainWindow
::
slotSelectUploadFile
);
connect
(
&
uploadFileManager
,
&
UploadFileManager
::
sigUploadProgress
,
this
,
&
MainWindow
::
slotUploadProgress
);
connect
(
&
uploadFileManager
,
&
UploadFileManager
::
sigFinish
,
this
,
&
MainWindow
::
slotUploadFinished
);
}
void
MainWindow
::
slotSelectFilePath
()
{
QString
filePath
=
QFileDialog
::
getOpenFileName
(
this
);
filePathEdit
->
setText
(
filePath
);
}
void
MainWindow
::
slotSelectUploadFile
()
{
uploadButton
->
setDisabled
(
true
);
progressBar
->
show
();
uploadFileManager
.
UploadFile
(
"http://test.open-ssl.cn/upload.php"
,
filePathEdit
->
text
());
}
void
MainWindow
::
slotUploadFinished
(
QNetworkReply
::
NetworkError
status
)
{
uploadButton
->
setDisabled
(
false
);
progressBar
->
hide
();
if
(
status
==
QNetworkReply
::
NoError
)
{
qInfo
()
<<
"upload success!"
;
}
else
{
qInfo
()
<<
"upload failed:"
;
}
}
void
MainWindow
::
slotUploadProgress
(
int
value
)
{
progressBar
->
setValue
(
value
);
}
qt_easy/QUploadFile/QUploadFile/mainwindow.h
0 → 100644
浏览文件 @
0c0c9290
#
ifndef
MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "upload_file_manager.h"
class
QPushButton
;
class
QLineEdit
;
class
QHBoxLayout
;
class
QVBoxLayout
;
class
QProgressBar
;
class
QNetworkReply
;
class
QNetworkAccessManager
;
class
MainWindow
:
public
QMainWindow
{
Q_OBJECT
public:
MainWindow
(
QWidget
*
parent
=
nullptr
);
~
MainWindow
();
void
InitUI
();
void
InitConnect
();
public
Q_SLOTS
:
void
slotSelectFilePath
();
void
slotSelectUploadFile
();
void
slotUploadFinished
(
QNetworkReply
::
NetworkError
status
);
void
slotUploadProgress
(
int
value
);
// void slotUploadProgress(qint64 bytesSent, qint64 bytesTotal);
private:
QPushButton
*
selectFilePathButton
;
QPushButton
*
uploadButton
;
QLineEdit
*
filePathEdit
;
QHBoxLayout
*
fileLayout
;
QVBoxLayout
*
mainLayout
;
QProgressBar
*
progressBar
;
UploadFileManager
uploadFileManager
;
};
#endif // MAINWINDOW_H
qt_easy/QUploadFile/QUploadFile/upload_file_manager.cpp
0 → 100644
浏览文件 @
0c0c9290
#
include
"upload_file_manager.h"
#include <QNetworkAccessManager>
#include <QFile>
#include <QHttpPart>
#include <QFileInfo>
#include <QNetworkReply>
UploadFileManager
::
UploadFileManager
(
QObject
*
parent
)
:
QObject
(
parent
)
,
manager
(
new
QNetworkAccessManager
(
this
))
{
}
void
UploadFileManager
::
UploadFile
(
QString
url
,
QString
filePath
)
{
QFile
*
file
=
new
QFile
(
filePath
);
if
(
!
file
->
open
(
QIODevice
::
ReadOnly
)){
return
;
}
QHttpMultiPart
*
multiPart
=
new
QHttpMultiPart
(
QHttpMultiPart
::
FormDataType
);
QHttpPart
filePart
;
filePart
.
setHeader
(
QNetworkRequest
::
ContentDispositionHeader
,
QVariant
(
"form-data; name=
\"
file
\"
; filename=
\"
"
+
QFileInfo
(
*
file
).
fileName
()
+
"
\"
"
));
filePart
.
setBodyDevice
(
file
);
QNetworkRequest
request
((
QUrl
(
url
)));
filePart
.
setHeader
(
QNetworkRequest
::
ContentTypeHeader
,
QVariant
(
"application/octet-stream"
));
multiPart
->
append
(
filePart
);
QNetworkReply
*
reply
=
manager
->
post
(
request
,
multiPart
);
connect
(
reply
,
&
QNetworkReply
::
uploadProgress
,
this
,
[
&
](
qint64
bytesSent
,
qint64
bytesTotal
){
qInfo
()
<<
"bytesSent:"
<<
bytesSent
<<
",bytesTotal:"
<<
bytesTotal
;
if
(
bytesTotal
!=
0
)
emit
sigUploadProgress
((
bytesSent
*
1.0
/
bytesTotal
)
*
100
);
});
connect
(
manager
,
&
QNetworkAccessManager
::
finished
,
this
,
&
UploadFileManager
::
slotUploadFinished
);
}
void
UploadFileManager
::
slotUploadFinished
(
QNetworkReply
*
reply
)
{
if
(
reply
)
emit
sigFinish
(
reply
->
error
());
reply
->
deleteLater
();
}
qt_easy/QUploadFile/QUploadFile/upload_file_manager.h
0 → 100644
浏览文件 @
0c0c9290
#
ifndef
UPLOAD_FILE_MANAGER_H
#define UPLOAD_FILE_MANAGER_H
#include <QObject>
#include <QNetworkReply>
class
QNetworkAccessManager
;
class
UploadFileManager
:
public
QObject
{
Q_OBJECT
public:
explicit
UploadFileManager
(
QObject
*
parent
=
nullptr
);
QNetworkAccessManager
*
manager
;
public:
/**
* @brief UploadFile
* @param url
* @param filePath
*/
void
UploadFile
(
QString
url
,
QString
filePath
);
public
Q_SLOTS
:
void
slotUploadFinished
(
QNetworkReply
*
reply
);
signals:
/**
* @brief sigFinish
* @param status
*/
void
sigFinish
(
QNetworkReply
::
NetworkError
status
);
/**
* @brief sigUploadProgress
* @param value
*/
void
sigUploadProgress
(
int
value
);
};
#endif // UPLOAD_FILE_MANAGER_H
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录