widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include "mythread.h"
#include "ui_widget.h"
#include <QSlider> // QSlider 类的头文件
#include <QString> // 用于定义样式表的 QString
#include <QGraphicsDropShadowEffect>// 阴影效果的头文件
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void rcvsing(int value);
void on_pushButton_clicked();
private:
Ui::Widget *ui;
myThread *thread;
};
#endif // WIDGET_H
myThread.h
#ifndef MYTHREAD_H
#define MYTHREAD_H
#include <QThread>
class myThread : public QThread
{
Q_OBJECT
public:
explicit myThread(QObject* parent = nullptr);
void run() override;
signals:
void openSingal(int value);
};
#endif // MYTHREAD_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QLabel>
#include <QGraphicsDropShadowEffect>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
thread = new myThread(this);
ui->horizontalSlider->setRange(0, 100);
ui->horizontalSlider->setValue(0);
connect(thread, &myThread::openSingal, this, &Widget::rcvsing);
QString styleSheet = R"(
QSlider::groove:horizontal {
background: qlineargradient(x1:0, y1:0, x2:1, y2:0,
stop:0 #1e90ff, stop:1 #00bfff);
height: 8px;
border-radius: 4px;
}
QSlider::handle:horizontal {
background: #ffffff;
width: 20px;
height: 20px;
margin: -6px 0;
border-radius: 10px;
border: 2px solid #1e90ff;
}
QSlider::sub-page:horizontal {
background: #FF0000; /* 已加载部分改为红色 */
height: 8px;
border-radius: 4px;
}
QSlider::add-page:horizontal {
background: #d3d3d3;
height: 8px;
border-radius: 4px;
}
)";
ui->horizontalSlider->setStyleSheet(styleSheet);
// 添加阴影效果
QGraphicsDropShadowEffect *shadowEffect = new QGraphicsDropShadowEffect(this);
shadowEffect->setBlurRadius(10);
shadowEffect->setColor(QColor(0, 0, 0, 100));
shadowEffect->setOffset(2, 2);
ui->horizontalSlider->setGraphicsEffect(shadowEffect);
}
Widget::~Widget()
{
delete ui;
}
void Widget::rcvsing(int value)
{
ui->horizontalSlider->setValue(value);
ui->label->setText(QString::number(value) + "%");
}
void Widget::on_pushButton_clicked()
{
thread->start();
}
myThread.cpp
#include "mythread.h"
#include <QThread>
myThread::myThread(QObject* parent)
: QThread(parent)
{
}
void myThread::run()
{
int value = 0;
while (value <= 100) {
emit openSingal(value);
value++;
QThread::msleep(100); // 每隔100毫秒更新一次
}
}
效果