
1、首先,定义一个QTimer,设置超时时间为30000毫秒(30秒)并设置为单次触发。
2、使用QNetworkRequest实现一个简单的网络请求,通过QNetworkAccessManager::get()开始获取Qt官网的HTML页面内容,请求过程是异步的,通过使用QEventLoop启动一个事件循环让其同步处理,将QTimer的timeout()信号以及QNetworkReply的finished()信号连接至其quit()槽函数,保证在定时器过期之后或者网络响应完成后事件循环得到退出,不至于一直处于阻塞状态即可。
第一步,创建一个dateTimeEdit,第二步,将其connect到一个函数上,第三部,提取它的QDateTime,然后利用下面的函数就可以了,它是基于shell命令的:
void moreidDialog::slot_save_time_key()
{
QDateTime time;
QString str = txt_time->text();
//判断格式是否正确
if (strcount("") != 4)
{
txt_time->setText(tr("ge shi cuo wu"));
return;
}
int i = 0,j = 0;
i = strindexOf("");
QString year = strmid(0,i);
j = strindexOf("",i + 1);
QString month = strmid(i + 1,j - i - 1);
i = j;
j = strindexOf("",i + 1);
QString day = strmid(i + 1,j - i - 1);
i = j;
j = strindexOf("",i + 1);
QString hour = strmid(i + 1,j - i - 1);
i = j;
j = strindexOf("",i + 1);
QString min = strmid(i + 1,j - i - 1);
bool ok = false;
yeartoInt(&ok);
if (ok == false)
{
txt_time->setText(tr("ge shi cuo wu"));
return;
}
monthtoInt(&ok);
if (ok == false)
{
txt_time->setText(tr("ge shi cuo wu"));
return;
}
daytoInt(&ok);
if (ok == false)
{
txt_time->setText(tr("ge shi cuo wu"));
return;
}
hourtoInt(&ok);
if (ok == false)
{
txt_time->setText(tr("ge shi cuo wu"));
return;
}
mintoInt(&ok);
if (ok == false)
{
txt_time->setText(tr("ge shi cuo wu"));
return;
}
str = "date -s " + month + "/" + day + "/" + year;
system(strtoLatin1()data());
str = "date -s " + hour + ":" + min + ":" + "00";
system(strtoLatin1()data());
//强制写入到CMOS
system("clock -w");
}
如果此类继承于QObject,可以直接调用startTimer函数,函数原型如下:
此函数开启定时器,并返回定时器的ID。
另外通过重载timerEvent函数来进行事件处理,其函数原型如下:
在该函数中进行事件处理,可通过定时器ID的判断(event->timerId() == m_TimerID),来处理多个定时器。
关闭定时器的函数为killTimer,函数原型如下:
class Example:publicQWidget
{
Q_OBJECT
public:
Example(QWidgetparent= 0);
~ Example();
virtualvoidtimerEvent(QTimerEventevent);
private:
int m_TimerID; //定时器ID
int m_TimerLeaveSeconds; //定时器剩余秒数
};
Example::Example(QWidgetparent)
:QWidget(parent),
m_TimerID(-1),
m_TimerLeaveSeconds(0)
{
uisetupUi(this);
m_TimerID=startTimer(1000);
}
void Example::timerEvent(QTimerEventevent)
{
if(event->timerId() ==m_TimerID)
{
//做相应的事件处理
killTimer(m_TimerID);//达到条件,杀死定时器
}
}
在类中添加QTimer类型成员,使用start()来开始并且把它的timeout()信号函数连接到适当的槽。当这段时间过去了,它将会发射timeout()信号。
QTimer timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(1000);
start()函数是重载函数,其原型如下:
(1)void QTimer::start()
启动或者重新启动定时器,其时间间隔是interval,可通过 setInterval(int msec) 函数进行设置。
(2)void QTimer::start(int msec)
启动或者重新启动定时器,时间间隔单位是毫秒。
结束一个定时器。
connect函数进行信号与槽的连接,每隔设置的固定间隔就会执行槽函数(update())。
注意:如果在类头文件中声明了一个QTimer变量,并且在构造函数中new了,不要忘了在析构函数中delete,并置位NULL。
另外,QTimer的精确度依赖于底下的 *** 作系统和硬件。绝大多数平台支持20毫秒的精确度,一些平台可以提供更高的。如果Qt不能传送定时器触发所要求的数量,它将会默默地抛弃一些。
(1)void QTimer::singleShot(int msec, const QObject receiver, const char member)
这是个静态函数,能够在给定的时间间隔后调用槽,并不是多次触发该槽函数,该槽函数只执行一次。使用此函数非常方便,也不必创建本地qTimer对象。
实例:
#include <qapplicationh>
#include <qtimerh>
int main( int argc, char argv )
{
QApplication a( argc, argv );
QTimer::singleShot( 10601000, &a, SLOT(quit()) );
// 创建并且显示你的窗口部件
return aexec();
}
这个示例程序会自动在10分钟之后终止(也就是600000毫秒)。
receiver是正在接收的对象并且member是一个槽。时间间隔是msec。
(2)bool QTimer::isActive () const
如果定时器正在运行,返回真,否则返回假。
(3)void QTimer::changeInterval ( int msec )
改变定时器时间间隔为msec毫秒。如果这个定时器信号是运行的,它将会被停止并且重新开始,否则它将会被开始。
以char型读取前两个字节。
利用文件,把这个int数值用二进制的方法写入文件,然后以char型读取。通过memcpy,将int型变量的首地址作为srcbuffer,char数组作为dstbuffer,每个int型变量占据buffer的4个字节。
不同语言、不同机器间通过buffer来存取int型值,要注意大头、小头的区别,必要时要做大小头转换 *** 作。
void ClockWindow::timerEvent(QTimerEvent event){ QDateTime qdatetime=QDateTime::currentDateTime(); int y=qdatetimedate()year(); int m=qdatetimedate()month(); int d=qdatetimedate()day(); QString strTime=qdatetimetime()toString(); QLabel TextLabel_Time = new QLabel(this); TextLabel_Time->setText(strTime+"
"+QString::number(d)+"/"+QString::number(m)+"/"+QString::number(y));
//显示时间格式为21:09:54 9/4/2009 QTimer time = new QTime(TextLabel_Time); QTimer timec = new QTime(TextLabel_Time) connect(time,SIGNAL(timeout()),TextLabel_Time,SLoT(show())); connect(timec,SIGNAL(timeout()),TextLabel_Time,SLoT(clear())); time->start(1000); timec->start(2000);
以上就是关于qt如何设置系统io超时时间全部的内容,包括:qt如何设置系统io超时时间、怎样用QT的 dateTimeEdit控件实现设置时间、Qt 定时器等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)