第一题、使用qss,通过线程,使进度条自己动起来
mythread.h
#ifndef MYTHREAD_H
#define MYTHREAD_H
#include <QObject>
#include <QThread>
#include <QDebug>
class mythread : public QThread
{
Q_OBJECT
public:
mythread(QObject* parent=nullptr);
private:
QThread* thread;
int i;
protected:
void run() override;
signals:
void send(int i);
};
#endif // MYTHREAD_H
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <mythread.h>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
protected slots:
void rcv(int i);
private:
Ui::Widget *ui;
mythread* thread;
};
#endif // WIDGET_H
mythread.cpp
#include "mythread.h"
mythread::mythread(QObject *parent)
:i(0)
{
}
void mythread::run()
{
while(1){
emit send(i);
i++;
//qDebug()<<"hhh";
if(i>=99)
{
i=0;
}
this->usleep(1000);
}
}
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QString qss = R"(
QSlider::groove:horizontal {
background-color: #f0f0f0; /* 滑轨的背景色为灰白色 */
height: 10px; /* 滑轨的高度增大 */
border-radius: 5px; /* 滑轨的圆角 */
}
QSlider::sub-page:horizontal {
background-color: qlineargradient(x1:0, y1:0, x2:1, y2:0, stop:0 #6a11cb, stop:1 #2575fc); /* 滑块左侧的渐变背景色 */
height: 10px; /* 滑块左侧的高度增大 */
border-radius: 5px; /* 滑块左侧的圆角 */
}
QSlider::handle:horizontal {
background-color: #ffffff; /* 滑块手柄的背景色 */
width: 24px; /* 滑块手柄的宽度增大 */
height: 24px; /* 滑块手柄的高度增大 */
margin: -7px 0; /* 滑块手柄的垂直居中调整 */
border-radius: 12px; /* 滑块手柄的圆角增大 */
border: 2px solid #cccccc; /* 滑块手柄的边框 */
}
)";
ui->horizontalSlider->setStyleSheet(qss);
thread=new mythread(this);
thread->start();
QObject::connect(thread,&mythread::send,this,&Widget::rcv);
}
Widget::~Widget()
{
delete ui;
}
void Widget::rcv(int i)
{
ui->horizontalSlider->setValue(i);
}
运行截图;
第二题;实现大文件的拷贝
mythread.h
#ifndef MYTHREAD_H
#define MYTHREAD_H
#include <QObject>
#include <QThread>
#include <QDebug>
#include <QFile>
#include <QMouseEvent>
#include <QFileDialog>
#include <QDropEvent>
class mythread : public QThread
{
Q_OBJECT
public:
mythread(QObject* parent=nullptr);
void run() override;
void fileio();
public slots:
void rcv(QString filename);
private:
QString filename;
// QFile file;
};
#endif // MYTHREAD_H
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QMoveEvent>
#include <QDragMoveEvent>
#include <QDragEnterEvent>
#include <QMimeData>
#include <QFileDialog>
#include <QDebug>
#include <mythread.h>
#include <QDropEvent>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
protected:
void dragEnterEvent(QDragEnterEvent *event);
void dropEvent(QDropEvent *event) override;
private:
Ui::Widget *ui;
QString filename;
mythread* thread;
signals:
void send(QString filename);
};
#endif // WIDGET_H
mythread.cpp
#include "mythread.h"
mythread::mythread(QObject* parent)
{
}
void mythread::run()
{
QFile file1;
file1.setFileName(filename);
file1.open(QIODevice::ReadOnly);
QFile file2;
QFileInfo fileInfo(filename);
QString file_end = fileInfo.fileName();//获取文件名
QString path="D:/QTproject/"+file_end;//拼接文件路径+文件名
file2.setFileName(path);
file2.open(QIODevice::WriteOnly);
double size=0;
while(1)
{
char arr[1024]="";
int res=file1.read(arr,1024);
if(res==0){qDebug()<<"传输数据大小: "<<size;return;}
file2.write(arr,1024);
size+=res;
// qDebug()<<"传输数据大小: "<<size;
}
file1.close();
file2.close();
}
void mythread::fileio()
{
}
void mythread::rcv(QString filename)
{
qDebug()<<filename;
this->filename=filename;
}
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
this->setAcceptDrops(1);
thread=new mythread(this);
QObject::connect(this,&Widget::send,thread,&mythread::rcv);
}
Widget::~Widget()
{
delete ui;
}
void Widget::dragEnterEvent(QDragEnterEvent *event)
{
event->acceptProposedAction();
}
void Widget::dropEvent(QDropEvent *event)
{
const QMimeData* mimedata=event->mimeData();//获取文件路径
QList<QUrl> list=mimedata->urls();//获取所有的文件地址
QUrl url=list[0];//获取第几个文件具体地址
filename=url.toLocalFile();//转化成字符串类型
emit send(filename);
thread->start();
}