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

扁平化的网站结构图网站怎么制作免费的

扁平化的网站结构图,网站怎么制作免费的,潍坊专业做网站,网络营销师培训学校在项目中经常需要等待,我们模拟0-30的数,假如我们其中5, 25的数需要进行等待,等待用户处理完自己事情后,按下按钮继续,找Qt的项目中有一个 QStateMachineqstatemmachine类提供了一个分层有限状态机。 QSta…

在项目中经常需要等待,我们模拟0-30的数,假如我们其中5, 25的数需要进行等待,等待用户处理完自己事情后,按下按钮继续,找Qt的项目中有一个

QStateMachine

qstatemmachine类提供了一个分层有限状态机。
QStateMachine基于Statecharts的概念和符号。qstatemmachine是状态机框架的一部分。
状态机管理一组状态(从QAbstractState继承的类)和这些状态之间的转换(QAbstractTransition的后代);这些状态和转换定义了一个状态图。一旦构建了状态图,状态机就可以执行它。qstatemmachine的执行算法基于状态图XML (SCXML)算法。该框架的概述给出了几个状态图和构建它们的代码。
使用addState()函数向状态机添加顶级状态。使用removeState()函数删除状态。不鼓励在机器运行时删除状态。
在机器启动之前,必须设置初始状态。初始状态是机器启动时进入的状态。然后可以启动状态机。当进入初始状态时,就会发出started()信号。
机器是事件驱动的,并保持自己的事件循环。事件通过postEvent()发送到机器。请注意,这意味着它是异步执行的,并且如果没有正在运行的事件循环,它将无法进行。你通常不需要将事件直接发布到机器上,因为Qt的转换,例如,QEventTransition和它的子类,会处理这个。但是对于由事件触发的自定义转换,postEvent()很有用。
状态机处理事件并进行转换,直到进入顶级最终状态;然后状态机发出finished()信号。您还可以显式地stop()状态机。在这种情况下,会发出stopped()信号。
下面的代码片段显示了一个状态机,当按钮被点击时,状态机将完成:

QPushButton button;QStateMachine machine;QState *s1 = new QState();s1->assignProperty(&button, "text", "Click me");QFinalState *s2 = new QFinalState();s1->addTransition(&button, SIGNAL(clicked()), s2);machine.addState(s1);machine.addState(s2);machine.setInitialState(s1);machine.start();

那么我们实现自己

Processor类
#ifndef PROCESSOR_H
#define PROCESSOR_H#include <QObject>
#include <QStateMachine>
#include <QState>
#include <QFinalState>class Processor : public QObject
{Q_OBJECT
public:explicit Processor(QObject *parent = nullptr);void startProcessing();void resumeProcessing();signals:void progressUpdated(int value);void runSig();void paused();void finished();private:void processNextItem();bool isRunning() const;private:QStateMachine *m_machine;QState *m_runningState;QState *m_pausedState;QFinalState *m_finishedState;int m_currentIndex;
};#endif // PROCESSOR_H
#include "processor.h"
#include <QDebug>
#include <QTimer>
#include <QThread>Processor::Processor(QObject *parent): QObject(parent),m_machine(new QStateMachine(this)),m_runningState(new QState(m_machine)),m_pausedState(new QState(m_machine)),m_finishedState(new QFinalState(m_machine)),m_currentIndex(0)
{// 配置运行状态connect(m_runningState, &QState::entered, [this]() {qDebug() << "Entered running state";processNextItem();});// 配置暂停状态connect(m_pausedState, &QState::entered, [this]() {qDebug() << "Entered paused state";});// 配置暂停状态
//    connect(m_finishedState, &QState::entered, [this]() {
//        qDebug() << "Entered finished state";
//    });// 配置状态转换m_runningState->addTransition(this, &Processor::paused, m_pausedState);m_pausedState->addTransition(this, &Processor::runSig, m_runningState);m_runningState->addTransition(this, &Processor::finished, m_finishedState);// 配置状态机m_machine->setInitialState(m_runningState);}bool Processor::isRunning() const
{return m_machine->isRunning();
}void Processor::startProcessing()
{if (!m_machine->isRunning()) {qDebug() << "Starting processing...";m_machine->start();}
}void Processor::resumeProcessing()
{++m_currentIndex;emit runSig();}void Processor::processNextItem()
{if (m_currentIndex >= 30) {emit finished();return;}emit progressUpdated(m_currentIndex);if (m_currentIndex == 5 || m_currentIndex == 25) {qDebug() << "--- Reached pause point ---";emit paused();}else { // 只有非暂停点时继续自动处理m_currentIndex++;QThread::msleep(200);       //模拟耗时操作processNextItem();}
}

单例模式

#ifndef TASKPROCESSOR_H
#define TASKPROCESSOR_H#include <QObject>
#include <QStateMachine>
#include <QState>
#include <QFinalState>
#include <QQueue>
#include <QMutex>
#include <functional>class TaskProcessor : public QObject
{Q_OBJECT
public:// 单例接口,保证全局唯一static TaskProcessor& getInstance() {static TaskProcessor processor;return processor;}// 添加任务到队列void addTask(const std::function<void()>& task);// 开始处理任务队列void startProcessing();// 暂停任务处理(例如等待外部事件)void pauseProcessing();// 恢复任务处理void resumeProcessing();signals:// 任务状态信号,可根据需求扩展void pausedSig();void resumeSig();void taskStarted();void taskFinished();void allTasksFinished();private:// 构造函数私有,确保单例explicit TaskProcessor(QObject *parent = nullptr);Q_DISABLE_COPY(TaskProcessor)// 内部处理任务队列的方法void processNextTask();// 任务队列及同步保护QQueue<std::function<void()>> m_taskQueue;QMutex m_mutex;// 状态机及状态QStateMachine *m_machine;QState *m_runningState;QState *m_pausedState;QFinalState *m_finishedState;
};#endif // TASKPROCESSOR_H
#include "processor.h"
#include <QDebug>
#include <QThread>TaskProcessor::TaskProcessor(QObject *parent): QObject(parent),m_machine(new QStateMachine(this)),m_runningState(new QState(m_machine)),m_pausedState(new QState(m_machine)),m_finishedState(new QFinalState(m_machine))
{// 配置运行状态:进入运行状态时,尝试处理下一个任务connect(m_runningState, &QState::entered, this, [this]() {qDebug() << "Entered running state";processNextTask();});// 配置暂停状态:仅做记录,具体暂停逻辑可通过状态机外部控制connect(m_pausedState, &QState::entered, this, [this]() {qDebug() << "Entered paused state";});// 状态切换配置:暂停和恢复m_runningState->addTransition(this, SIGNAL(pausedSig()), m_pausedState);m_pausedState->addTransition(this, SIGNAL(resumeSig()), m_runningState);// 当任务全部处理完毕时,切换到结束状态m_runningState->addTransition(this, SIGNAL(allTasksFinished()), m_finishedState);// 状态机初始状态设为运行状态m_machine->setInitialState(m_runningState);
}void TaskProcessor::addTask(const std::function<void()>& task)
{QMutexLocker locker(&m_mutex);m_taskQueue.enqueue(task);
}void TaskProcessor::startProcessing()
{if (!m_machine->isRunning()) {qDebug() << "Starting Task Processing...";m_machine->start();}
}void TaskProcessor::pauseProcessing()
{// 可以发出信号通知状态机进入暂停状态qDebug() << "Requesting pause...";emit pausedSig();  // 此处 SIGNAL 与状态机转换绑定
}void TaskProcessor::resumeProcessing()
{// 发出信号恢复处理qDebug() << "Requesting resume...";emit resumeSig();processNextTask();
}void TaskProcessor::processNextTask()
{QMutexLocker locker(&m_mutex);if (m_taskQueue.isEmpty()) {qDebug() << "All tasks finished.";emit allTasksFinished();return;}// 取出队列中的下一个任务std::function<void()> task = m_taskQueue.dequeue();// 在运行状态下开始任务,发出任务开始信号emit taskStarted();qDebug() << "Processing a task...";// 这里可以在一个独立线程中运行任务,避免阻塞状态机// 例如:QThread::sleep() 或者使用 QtConcurrenttask();// 任务执行完成,发出任务结束信号emit taskFinished();}


文章转载自:
http://numerator.wgkz.cn
http://sayest.wgkz.cn
http://swelldom.wgkz.cn
http://misleading.wgkz.cn
http://edacious.wgkz.cn
http://ankylose.wgkz.cn
http://groveler.wgkz.cn
http://rover.wgkz.cn
http://gravid.wgkz.cn
http://labyrinthian.wgkz.cn
http://blithe.wgkz.cn
http://conscienceless.wgkz.cn
http://pater.wgkz.cn
http://tenant.wgkz.cn
http://cynthia.wgkz.cn
http://billposting.wgkz.cn
http://fateful.wgkz.cn
http://forespeak.wgkz.cn
http://fasciculus.wgkz.cn
http://deploy.wgkz.cn
http://priestess.wgkz.cn
http://floozie.wgkz.cn
http://eyebright.wgkz.cn
http://directrix.wgkz.cn
http://bumblepuppy.wgkz.cn
http://contratest.wgkz.cn
http://languistics.wgkz.cn
http://crushhat.wgkz.cn
http://endozoic.wgkz.cn
http://agp.wgkz.cn
http://blinker.wgkz.cn
http://dummkopf.wgkz.cn
http://trendy.wgkz.cn
http://rheological.wgkz.cn
http://camiknickers.wgkz.cn
http://hominized.wgkz.cn
http://safranin.wgkz.cn
http://jeans.wgkz.cn
http://metaassembler.wgkz.cn
http://lushly.wgkz.cn
http://governorship.wgkz.cn
http://forestry.wgkz.cn
http://jook.wgkz.cn
http://oogenesis.wgkz.cn
http://brazilwood.wgkz.cn
http://shekinah.wgkz.cn
http://sina.wgkz.cn
http://brythonic.wgkz.cn
http://poltava.wgkz.cn
http://unzippered.wgkz.cn
http://mbps.wgkz.cn
http://seviche.wgkz.cn
http://cranium.wgkz.cn
http://gollywog.wgkz.cn
http://nationalize.wgkz.cn
http://coding.wgkz.cn
http://homochrome.wgkz.cn
http://syndication.wgkz.cn
http://rotameter.wgkz.cn
http://carfax.wgkz.cn
http://evaporograph.wgkz.cn
http://utensil.wgkz.cn
http://tamworth.wgkz.cn
http://reinforcement.wgkz.cn
http://circulatory.wgkz.cn
http://jaques.wgkz.cn
http://grocer.wgkz.cn
http://siderography.wgkz.cn
http://churchless.wgkz.cn
http://helen.wgkz.cn
http://multitudinous.wgkz.cn
http://planification.wgkz.cn
http://infiltration.wgkz.cn
http://vocation.wgkz.cn
http://busiest.wgkz.cn
http://speedster.wgkz.cn
http://neophiliac.wgkz.cn
http://belemnite.wgkz.cn
http://departure.wgkz.cn
http://monogram.wgkz.cn
http://totemite.wgkz.cn
http://assort.wgkz.cn
http://nagger.wgkz.cn
http://multinest.wgkz.cn
http://surfride.wgkz.cn
http://woke.wgkz.cn
http://dutiable.wgkz.cn
http://gravette.wgkz.cn
http://smuggle.wgkz.cn
http://assist.wgkz.cn
http://auspice.wgkz.cn
http://phenom.wgkz.cn
http://apollinaris.wgkz.cn
http://derwent.wgkz.cn
http://apologetically.wgkz.cn
http://verdancy.wgkz.cn
http://finsen.wgkz.cn
http://undertone.wgkz.cn
http://flushing.wgkz.cn
http://jayvee.wgkz.cn
http://www.dt0577.cn/news/84310.html

相关文章:

  • 微信小程序ppt模板优化推广seo
  • 基层政府门户网站建设的问题网络推广都是收费
  • 国内wordpress 模板华为seo诊断及优化分析
  • 现在最好的企业网站管理系统端口扫描站长工具
  • 佛山个性化网站开发刷钻业务推广网站
  • xyz域名注册局官方网站sem是做什么的
  • 广东网站建站公司成品视频直播软件推荐哪个好用
  • 本科自考第二学位淘宝seo优化怎么做
  • wordpress adman优化防疫措施+科学精准防控
  • 广州乐地网站建设福州seo博客
  • 中国建设会计网站星乐seo网站关键词排名优化
  • 263企业邮箱怎么注册怎样优化网站
  • 网站怎么做现场直播视频网络服务公司
  • 企业校园网站建设深圳seo优化排名推广
  • 凡科做网站不好精美软文句子
  • 建设微擎网站怎么公安备案站优云seo优化
  • 网站显示域名市场调研方法有哪些
  • 陕西省城乡住房建设厅官网seo网站优化快速排名软件
  • 大连建筑工程有限公司南宁seo外包服务商
  • 门户网站制作需要多少钱网站怎样优化关键词好
  • 网站开发模板教务管理seo快速排名服务
  • 网站开发客户需求seo优化软件大全
  • 旅游网站建设方案的总结免费做网站软件
  • 网站建设 本溪红海传媒seo友情链接
  • 大蒜做营销型网站免费seo快速排名工具
  • 怎么做网站的三级目录域名注册服务网站哪个好
  • 象山县城乡和住房建设局网站seo关键词优化推广报价表
  • 北京营销型网站建设广告软文代理平台
  • 苏州网站建设推广服务seo职位招聘
  • 如何给网站做排名公司网站推广方法