Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将QTimer用于唤醒应用程序_Qt_Wakeup - Fatal编程技术网

将QTimer用于唤醒应用程序

将QTimer用于唤醒应用程序,qt,wakeup,Qt,Wakeup,我需要在特定的时间做一些检查。在Android中,我使用AlarmManager来实现这一点,但在qt中,我不知道如何实现这一点。根据我使用qt的经验,QTimer::singleShot在应用程序关闭时停止,但我需要使它在应用程序关闭后运行。我将在后台运行应用程序,但我真的不想在打开的应用程序屏幕上看到我的应用程序 谢谢您的帮助。您可以创建一个类来处理此问题。下面的示例使用了一个“WindowManager”类和一个子类QMainWindow,但您当然可以使用任何QWidget “wm.h”

我需要在特定的时间做一些检查。在Android中,我使用AlarmManager来实现这一点,但在qt中,我不知道如何实现这一点。根据我使用qt的经验,QTimer::singleShot在应用程序关闭时停止,但我需要使它在应用程序关闭后运行。我将在后台运行应用程序,但我真的不想在打开的应用程序屏幕上看到我的应用程序


谢谢您的帮助。

您可以创建一个类来处理此问题。下面的示例使用了一个“WindowManager”类和一个子类QMainWindow,但您当然可以使用任何QWidget

“wm.h”

#包括
类主窗口:公共QMainWindow
{
Q_对象
公众:
主窗口(){}
信号:
void startTimer(int);
受保护的:
作废关闭事件(QCloseEvent*事件)
{
事件->设置已接受(错误);
startTimer(5000);
隐藏();
}
};
类WindowManager:公共QObject
{
公众:
WindowManager()
{
主窗口*w=新的主窗口;
QTimer*定时器=新的QTimer(此);
连接(w,信号(起始定时器(int)),定时器,插槽(起始定时器(int));
连接(定时器、信号(超时())、w、插槽(显示());
w->show();
}
};
“main.cpp”

#包括
#包括“wm.h”;
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
窗口管理器;
返回a.exec();
}

您可以创建一个类来处理此问题。下面的示例使用了一个“WindowManager”类和一个子类QMainWindow,但您当然可以使用任何QWidget

“wm.h”

#包括
类主窗口:公共QMainWindow
{
Q_对象
公众:
主窗口(){}
信号:
void startTimer(int);
受保护的:
作废关闭事件(QCloseEvent*事件)
{
事件->设置已接受(错误);
startTimer(5000);
隐藏();
}
};
类WindowManager:公共QObject
{
公众:
WindowManager()
{
主窗口*w=新的主窗口;
QTimer*定时器=新的QTimer(此);
连接(w,信号(起始定时器(int)),定时器,插槽(起始定时器(int));
连接(定时器、信号(超时())、w、插槽(显示());
w->show();
}
};
“main.cpp”

#包括
#包括“wm.h”;
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
窗口管理器;
返回a.exec();
}

这是针对Android的,还是只是针对通用Qt?通用Qt,我没有在问题上提到这一点。抱歉。我不知道我写评论时的想法可能是重复的,但这个问题不是针对Android,symbian和Qt。这是针对安卓的,还是只是通用Qt?通用Qt,我没有在问题上提到这一点。抱歉。可能重复我写评论时不知道我在想什么,但这个问题不是针对Android、symbian和qt。谢谢你的快速回复,我现在无法尝试,但我想问,如果应用程序关闭,计时器不会停止吗?超时信号应用程序唤醒了吗?这个想法是你的主窗口可以关闭(或者对话框,或者其他什么),但是应用程序将继续在后台运行,直到主窗口被QTimer再次显示。谢谢你的回复,我是qt的新手,仍然知道我还有一个问题。如果我使用hide(),应用程序是否显示在“打开的应用程序”窗口中?@Utk12再次查看编辑:这是一个我测试过的工作示例。当您完成测试时,您需要手动关闭它(例如,如果使用Windows,则使用“任务管理器->结束进程”),但您得到了要点。是的,它仍然显示在任务管理器中。除非您使用Windows API,否则我不知道其他方法可以执行此操作。谢谢Anthony,我将在几个小时后进行测试:)谢谢您的快速回复,我现在无法尝试,但我想问,如果应用程序关闭,计时器不会停止吗?超时信号应用程序唤醒了吗?这个想法是你的主窗口可以关闭(或者对话框,或者其他什么),但是应用程序将继续在后台运行,直到主窗口被QTimer再次显示。谢谢你的回复,我是qt的新手,仍然知道我还有一个问题。如果我使用hide(),应用程序是否显示在“打开的应用程序”窗口中?@Utk12再次查看编辑:这是一个我测试过的工作示例。当您完成测试时,您需要手动关闭它(例如,如果使用Windows,则使用“任务管理器->结束进程”),但您得到了要点。是的,它仍然显示在任务管理器中。除非您使用Windows API,否则我不知道还有其他方法可以实现此功能。谢谢Anthony,我将在几个小时后进行测试:)
#include <QtGui>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow() {}

signals:
    void startTimer(int);

protected:
    void closeEvent(QCloseEvent *event)
    {
        event->setAccepted(false);
        startTimer(5000);
        hide();
    }
};

class WindowManager : public QObject
{
public:
    WindowManager()
    {
        MainWindow *w = new MainWindow;
        QTimer *timer = new QTimer(this);

        connect(w, SIGNAL(startTimer(int)), timer, SLOT(start(int)));
        connect(timer, SIGNAL(timeout()), w, SLOT(show()));

        w->show();
    }
};
#include <QtCore/QCoreApplication>
#include "wm.h";

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    WindowManager wm;
    return a.exec();
}