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

怎么设计网站页面婚恋网站排名前三

怎么设计网站页面,婚恋网站排名前三,天下第一日本视频社区动漫,哈尔滨建站模板厂家引出 UI程序之所叫UI程序,是因为需要与用户有交互,用户交互一般是通过鼠标键盘等的输入设备,那UI程序就需要有能随时响应用户交互的能力。 一个C程序的main函数大概是下面这样: int main() {...return 0; } 我们如何使程序能随…

引出

        UI程序之所叫UI程序,是因为需要与用户有交互,用户交互一般是通过鼠标键盘等的输入设备,那UI程序就需要有能随时响应用户交互的能力。

一个C++程序的main函数大概是下面这样:

int main()
{...return 0;
}

我们如何使程序能随时可以响应用户交互呢?一个比较简单的设计就是通过while循环:

int main()
{while (1) {获取用户输入;处理用户输入;}return 0;
}

有时一个事件的处理可能稍微会多花一点时间,如果是上面这样,在处理一个事件时就不能响应其他事件了,所以我们需要一个队列,系统可以将新事件放到队列里:

int main()
{while(1) { event = getEventFromQueue()dealEvent(event);}
}

原理

        在Qt中,事件循环是一种机制,用于处理各种异步事件。事件循环通过一个事件队列来管理和调度事件,当队列中有事件时,事件循环会从队列中依次取出事件并处理,直到队列为空或者事件循环被中断

        事件循环首先是一个无限“循环”,程序在exec()里面无限循环,能让跟在exec()后面的代码得不到运行机会,直至程序从exec()跳出。从exec()跳出时,事件循环即被终止。

        其次,之所以被称为“事件”循环,是因为它能接收事件,并处理之。当事件太多而不能马上处理完的时候,待处理事件被放在一个“队列”里,称为“事件循环队列”。当事件循环处理完一个事件后,就从“事件循环队列”中取出下一个事件处理之。当事件循环队列为空的时候,它和一个啥事也不做的永真循环有点类似,但是和永真循环不同的是,事件循环不会大量占用CPU资源。事件循环的本质就是以队列的方式再次分配线程时间片。

事件是如何产生的?

        事件的产生可以分为两种:

        程序外部产生:指系统产生的事件,例如鼠标按下(MouseButtonPress)、按键按下(KeyPress)等。Qt通过捕捉系统事件,将其封装成自己的QEvent类,再将事件发送出去。

        程序内部产生:指在代码中手动创建一个事件,然后通过sendEvent/postEvent将事件发送到事件循环中。其中,sendEvent是阻塞型的发送方式,会等待事件处理完成后再继续执行;而postEvent是非阻塞型的发送方式,会将事件放入事件队列中,并立即返回。

本质

        QEventLoop即Qt中的事件循环类。主要接口如下:

//exec是启动事件循环,调用exec以后,调用exec的函数就会被“阻塞”,直到EventLoop里面的while循环结束。
int exec(QEventLoop::ProcessEventsFlags flags = AllEvents)
//exit是退出事件循环;
void exit(int returnCode = 0)
bool isRunning() const
//processEvents是及时处理队列中的事件(这个很有用)
bool processEvents(QEventLoop::ProcessEventsFlags flags = AllEvents)
void processEvents(QEventLoop::ProcessEventsFlags flags, int maxTime)
void wakeUp()

示意图:

        这里有个问题,exec阻塞了当前函数,还怎么退出EventLoop呢?

        答案是:在派发事件后,某个事件处理的函数中,达到事件退出条件时,调用exit函数,将EventLoop中的退出标识设为true。

        一般的Qt程序,main函数中都有一个QCoreApplication/QGuiApplication/QApplication,并在末尾调用 exec。

        创建Qt Core Application时使用的是QCoreApplication,创建Qt Widgets Application时使用的是QApplication,创建Qt Quick Application时使用的是QGuiApplication。

其他

//例1:
int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget_ScrollBar w;w.show();/*w.show()不生效;界面不会输出;UI程序中事件循环实质是:通过UI来进行事件的循环处理*///return a.exec();return 0;
}//例2:
int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget_ScrollBar w;w.show();a.exec();//阻塞后续程序执行/*只有exec()退出,事件循环结束,才会输出Hello World*/qDebug() << "Hello World";return 0;
}

http://www.hengruixuexiao.com/news/43234.html

相关文章:

  • 山东潍坊疫情最新消息2022企业seo排名优化
  • 如何提高网站知名度微信管理助手
  • 做移动端网站软件1元涨1000粉
  • 湘潭网站建设 磐石网络荣誉app推广拉新接单平台
  • 做网站 源码福州seo服务
  • 广州网站开发定制方案做网站的平台有哪些
  • 网站灰色网上宣传方法有哪些
  • 专业做网站服务商章鱼磁力链接引擎
  • 网站制作设计多少钱百度西安分公司地址
  • 做网站和网页的目的和作用武汉it培训机构排名前十
  • 旅游微网站建设第一接单网app地推和拉新
  • 武汉seo搜索引擎优化天津的网络优化公司排名
  • 上海大型网站制作公司百度云网盘网页版登录
  • 莱芜找工作网站搜盘 资源网
  • 做短视频网站线上推广渠道有哪些方式
  • 大连网站推广公司中小企业管理培训课程
  • 网站扁平结构泉州百度网站推广
  • 赌博类网站开发seo基础课程
  • cms织梦织梦修改网站源码网站开发技术
  • 让人做网站需要注意哪些问题seo网站推广工作内容
  • 山西大同网站建设价格seo品牌优化百度资源网站推广关键词排名
  • 小辰青岛网站建设爱站之家
  • 陕西做网站公司哪家好网域名查询地址
  • 软件前端开发工程师长春seo排名扣费
  • 石景山区住房城乡建设委官方网站外贸seo网站
  • 在哪家网站做推广好电商平台
  • 软件设计师怎么考重庆seo排名收费
  • 烟台市最好的专业做网站的公司网站建设一条龙
  • 2017年做网站多少钱搜索引擎优化关键词选择的方法有哪些
  • 建设银行审计招聘网站优化系统软件