当前位置: 首页 > news >正文

03.06 QT

一、使用QSlider设计一个进度条,并让其通过线程自己动起来

程序代码:

<1> Widget.h:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QThread>
#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();

private:
    Ui::Widget *ui;
    myThread* thread;

public slots:

private slots:
    void on_pushButton_clicked();
    void on_pushButton_2_clicked();
};
#endif // WIDGET_H

<2> Widget.cpp:

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    thread = new myThread(this);//创建线程
    QObject::connect(thread,&myThread::pupdate,ui->horizontalSlider,&QSlider::setValue);




      QString qss = (R"(
                     QSlider {
                         background-color: transparent;
                     }
                     QSlider::groove:horizontal {
                         background-color: #E0E0E0;
                         height: 10px;
                         border-radius: 5px;
                     }
                     QSlider::sub-page:horizontal {
                         background: qlineargradient(x1:0, y1:0, x2:1, y2:0, stop:0 #6A11CB, stop:1 #2575FC);
                         border-radius: 5px;
                         box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2);
                     }
                     QSlider::handle:horizontal {
                         background: #FFFFFF;
                         width: 16px;
                         height: 16px;
                         margin: -4px 0;
                         border-radius: 8px;
                         border: 2px solid #2575FC;
                         box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2);
                     }
                 )");
      ui->horizontalSlider->setStyleSheet(qss);

}

Widget::~Widget()
{
    thread->terminate();
    delete ui;
}



void Widget::on_pushButton_clicked()
{
    thread->start();
}

void Widget::on_pushButton_2_clicked()
{
    thread->terminate();
}

<3> myThread.h:

#ifndef MYTHREAD_H
#define MYTHREAD_H

#include <QThread>
#include <QSlider>

class myThread : public QThread
{
    Q_OBJECT
public:
    myThread(QObject* parent = nullptr);

protected:
    virtual void run() override;

signals:
    void pupdate(int progress);

private:

};

#endif // MYTHREAD_H

<4> myThread.cpp:

#include "mythread.h"

myThread::myThread(QObject* parent)
    :QThread(parent)
{

}

void myThread::run()
{
    int progress = 0;
    while(1){
        QThread::usleep(5000);
        progress = (progress + 1) % 101;
        emit pupdate(progress);

    }
}

运行结果:

相关文章:

  • ComfyUI进阶教程核心要点与详解
  • 多模态模型在做选择题时,如何设置Prompt,如何精准定位我们需要的选项
  • 【Kubernetes 指南】基础入门——Kubernetes 基本概念(四)
  • Python在DevOps中的应用:自动化CI/CD管道的实现
  • 【电控笔记z29】扰动估测器DOB估测惯量J-摩擦系数B
  • 私有云基础架构与运维(一)
  • Mybatis中的设计模式
  • SpringBoot+Vue 多模块(子父工程)项目的注册登录及增删改查
  • 软件工程画图题
  • leetcode202 快乐数 哈希结构 集合
  • Ubuntu 安装docker docker-compose
  • 颠覆传统软件测试!Browser Use WebUI+DeepSeek:软件测试行业的革命性突破
  • 深入剖析Android Service:原理、生命周期与实战应用
  • Python中判断静态方法的六种方式
  • 物联网系统搭建
  • 【橘子golang】从golang来谈闭包
  • 【五.LangChain技术与应用】【29.LangChain Agent小案例1:智能代理的实战应用】
  • 6. 机器人实现远程遥控(具身智能机器人套件)
  • 【JAVA架构师成长之路】【持久层】第5集:PreparedStatement防SQL注入
  • 计算机数据库三级刷题总结(博主89分已过,总结的内容分享)
  • 廊坊门户网站/六安seo
  • 南宁小程序开发设计/网站seo谷歌
  • 点击排名优化/企业seo排名有 名
  • 17做网站新塘牛仔城/微信公众号运营推广方案
  • 没有网站可以做cpa广告么/100大看免费行情的软件
  • 江西省城市建设档案馆网站/什么是百度竞价推广