Qt的定时器0.0001
来源:互联网 发布:微信第三方源码 编辑:程序博客网 时间:2024/04/29 15:13
因为管理打铃,每当天气比较奇怪的时候,就要去做临时的调整,超级麻烦。先要关闭原来的打铃软件,再等时间到了打铃,然后过一段时间重新打开那个打铃软件,跑来跑去。所以打算自己做一个定时器来帮忙完成这项工作,希望能做到,远程操控,一次搞定。不过做事要一步一步来,先就一次搞定吧。
定时器需要有一个任务列表,再界面上用一个tableview显示,同时打算永xml结构进行存储方便下次重新运行。
<?xml version="1.0" encoding="UTF-8"?><Missons><misson><time>8:30</time><action>launch</action><path>D:/</path></misson><misson><time>9:30</time><action>play</action><path>D:/</path></misson></Missons>
结构比较简单每个任务就三个字段,时间(time)/任务类型(action)/路径(path)
任务类型是希望这个程序能打开关闭其他软件的同时具备播放音乐德功能。(毕竟还心怀自己做一个打铃软件的梦想)launch表示运行,play表示播放音乐。
使用Dom读取这个文件,新建类readxml,仅仅做了读取操作也没几行代码。
readXml::readXml(QString path){ QDomDocument doc; QFile file(path); if (!file.open(QIODevice::ReadOnly)) { return;} if (!doc.setContent(&file)) { file.close(); return; } file.close(); QDomElement root = doc.documentElement(); dnl=root.childNodes();//获取子节点 count=dnl.count();//将节点个数赋值给count file.close();}QList<QString> readXml::readItem(int i)//指定读取哪个子节点,返回一个QList包含该节点的数据{ QDomElement qe= dnl.item(i).toElement(); QDomElement element =qe.firstChildElement(); QList<QString> listStr; for(int j=3;j>0;j--) { listStr<<element.text(); element=element.nextSiblingElement(); } return listStr;}int readXml::readCount()//返回子节点的个数{ return count;}
作为万年新手,能做出个会动的东西就已经谢天谢地了,不考虑扩展性了。反正能读取了。接着要做的就是将这些数据在tableview里显示出来。
QStandardItemModel *m=new QStandardItemModel();//头文件里声明一个模型m->setHorizontalHeaderItem(0,new QStandardItem(QObject::tr("Time"))); m->setHorizontalHeaderItem(1,new QStandardItem(QObject::tr("Action"))); m->setHorizontalHeaderItem(2,new QStandardItem(QObject::tr("Path"))); ui->tableView->setModel(m); AddData(); //将模型应用于tableview这里下面是就是AddData()方法void MainWindow::AddData(){ QString path="D:/cv.xml"; readXml *rx=new readXml(path); for(int i=0;i<rx->readCount();i++) { QList<QString> lstr=rx->readItem(i); m->setItem(i,0,new QStandardItem(lstr.value(0))); m->setItem(i,1,new QStandardItem(lstr.value(1))); m->setItem(i,2,new QStandardItem(lstr.value(2))); }}
就是将所有根结点下的子节点都出来,放在tableview中,后面还需要进行排序的,现在还没弄。
定时器的基本任务定时功能,就用QTimer的静态方法signalSlot来实现,需要再弄一个线程,新建timerInThread类继承QThread来实现。
class timerInThread : public QThread{ Q_OBJECTpublic: timerInThread(); bool stop ; void run();public slots: void sendflag();signals: void timeout();};
这里分别声明了槽和信号,还有那个 Q_OBJECT 宏虽然不知道干什么的,但是必需的。
void timerInThread::run(){ //if(!stop) // { QTimer::singleShot(t,this,SLOT(sendflag())); exec(); // }}void timerInThread::sendflag(){ emit timeout();}
stop变量暂时还没有什么用,run()里的exec()也是必需的,据说和事件循环有关的,还一知半解,反正没有这个exec() 信号根本发不出去。那个定义的槽就是在这里发信号的。
现在完成度就这么多,总共也没几行代码却遇到了各种问题。Dom比较通用倒没什么,Qt里信号和槽很好用,那个线程和事件循环还不是很明白。
- Qt的定时器0.0001
- QT 定时器的使用
- Qt的定时器QTimer
- QT定时器的用法
- Qt定时器的使用
- Qt定时器的使用
- Qt 定时器的使用
- Qt定时器:QObject类的定时器和定时器类QTimer
- QT中定时器的使用方法
- QT中定时器的使用方法
- QT中定时器的使用方法
- Qt中的定时器的使用
- qt中定时器的使用
- QT中定时器的使用
- QT定时器使用的实例
- QT中定时器的使用方法
- QT中定时器的使用方法
- QT中定时器的用法
- Altium Designer使用技巧总结(一)
- openGL学习心得(2)
- 浅谈硬件的复位脚
- 文件传输协议FTP与TCP/IP协议之间有什么关系
- 仿知乎首页学习CoordinateLayout
- Qt的定时器0.0001
- HTML+CSS基础 table中的tr中的td标签中的align属性设置文本居中,左对齐,右对齐
- 目标检测论文回顾
- SQL手工注入测试
- android 中的广播 ,系统广播和自定义广播
- HTML+CSS基础 table中的tr中的td标签中的valign属性设置文本靠上,中间,靠下
- Mybatis入门例子
- 消息推送系统——(一)概念与原理
- HTML+CSS基础 改变form-input-type-reset按钮(重置按钮)显示的文本