Qtday5
目录
Qt:day5
一、作业1
将一个 QSlider,使用QSS语句,画成一个进度条:
要画2个部分:QSlider的槽、QSlider滑块;
进度条通过线程自己动起来。
【运行结果】:点Play按钮后,线程运行滑块从最左端向右移动到最右端停止。
【Headers / mythread.h】:
#ifndef MYTHREAD_H
#define MYTHREAD_H
#include <QThread>
class myThread : public QThread
{
Q_OBJECT
public:
explicit myThread(QObject* parent = nullptr);
signals:
void sendSignal();
protected:
virtual void run() override;
};
#endif // MYTHREAD_H
【Headers / 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 slots:
void on_pushButton_clicked();
void rcvSignal();
private:
Ui::Widget *ui;
myThread* thread;
};
#endif // WIDGET_H
【Sources / mythread.cpp】:
#include "mythread.h"
#include <QDebug>
#include <QThread>
myThread::myThread(QObject* parent)
:QThread(parent)
{
}
void myThread::run()
{
while(!isInterruptionRequested()){ //检测线程是否被请求退出
emit sendSignal();
QThread::usleep(100000); // 0.1s
}
}
【Sources / widget.cpp】:
#include "widget.h"
#include "ui_widget.h"
#include "mythread.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//QString qss = "QSlider::sub-page{background-color:blue} QSlider::groove:horizontal{background-color:red}";
QString qss = "QSlider::groove:horizontal { background: gray; } "
"QSlider::sub-page:horizontal { background: blue; } "
"QSlider::handle:horizontal { background: white; width: 10px; }";
ui->horizontalSlider->setStyleSheet(qss);
ui->horizontalSlider->setMaximum(100);
thread = new myThread(this);
QObject::connect(thread, &myThread::sendSignal, this, &Widget::rcvSignal);
}
Widget::~Widget()
{
if(thread){
thread->quit();
thread->wait();
//thread->terminate();
delete thread;
}
delete ui;
}
void Widget::on_pushButton_clicked()
{
thread->start();
}
void Widget::rcvSignal()
{
int currentValue = ui->horizontalSlider->value();
if(currentValue < ui->horizontalSlider->maximum()){
ui->horizontalSlider->setValue(currentValue + 1);
}
}
【Sources / main.cpp】:
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}