qt如何设置系统io超时时间

qt如何设置系统io超时时间,第1张

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 定时器等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9654996.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存