我有图形用户界面创建的线程&管理图形用户界面内容。现在当应用程序空闲时,即所有线程都空闲(或者即使只有GUI线程空闲),那么我希望我的继承类的对象发出SIGNAL
。因此,无论何时应用程序闲置,我都会默默创建下一阶段所需的Widgets
。所以我想知道如何让这个对象发出一个SIGNAL
只要GUI线程空闲?我的应用程序是多线程 &有多个类别,因此SIGNAL
不是必须仅在类别GUI中发出。 一旦线程变为空闲状态,不应该立即释放SIGNAL
。我希望线程应该闲置足够的时间,以便我确信用户实际上是空闲的。 谢谢!发出SIGNAL信号?
7
A
回答
11
QAbstractEventDispatcher允许将自己的事件插入Qt's event loop。它也允许监视事件循环的工作量。
这里是一个例子。该小部件正在侦听QAbstractEventDispatcher :: awake()和QAbstractEventDispatcher :: aboutToBlock()信号以了解事件循环何时繁忙。
#include <QtGui>
class IdleAwareWidget : public QWidget
{
Q_OBJECT
public:
IdleAwareWidget(QWidget *parent = 0) : QWidget(parent) {
dispatcher = QAbstractEventDispatcher::instance();
connect(dispatcher, SIGNAL(awake()), SLOT(awake()));
connect(dispatcher, SIGNAL(aboutToBlock()), SLOT(aboutToBlock()));
}
private slots:
void awake() {
lastAwake = QTime::currentTime();
qDebug() << "Slept for " << lastBlock.msecsTo(lastAwake) << " msec";
}
void aboutToBlock() {
lastBlock = QTime::currentTime();
qDebug() << "Worked for " << lastAwake.msecsTo(lastBlock) << " msec";
}
private:
QAbstractEventDispatcher *dispatcher;
QTime lastAwake;
QTime lastBlock;
};
main.cpp中:
#include <QtGui>
#include "idle_widget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
IdleWidget widget;
widget.show();
return a.exec();
}
如果问题是只是空闲处理,然后用0间隔QTimer是一个选项:
QTimer::singleShot(0, this, SLOT(doWorkInIdle()));
这将预定来电doWorkInIdle()
槽只要事件循环进入空闲状态。将工作分解为小卡盘不会阻止循环,应用程序将保持响应。
+0
谢谢你的答复! – 2013-02-17 11:35:00
相关问题
- 1. C信号。 signal()vs sigset()?
- 2. 如何在其成员发出信号时发出信号?
- 3. QVector发生变化时发出信号
- 4. AutoResetEvent发出信号之前触发
- 5. 你可以从信号处理程序中调用signal()吗?
- 6. 从ObServer发出的选择性D-BUS信号(单播信号)
- 7. 使用观察者发出信号灯信号?
- 8. 创建并发出GTK信号
- 9. QMdiArea不会发出customContextMenuRequested信号
- 10. Chaco和PyQt发出信号失败
- 11. 未收到Qt发出的信号
- 12. pyqt4发出信号不起作用
- 13. QQmlApplicationEngine不发出警告信号
- 14. QNetworkAccessManager永远不会发出finished()信号
- 15. QTcpSocket不会发出错误信号
- 16. 避免QTimer发出超时信号
- 17. 从线程发送信号时出错
- 18. QT - 悬停QLabel时发出信号
- 19. 抑制信号并在稍后发出
- 20. qt按钮发出多个信号
- 21. 如何从非PyQt类发出信号?
- 22. 我可以从python发出信号吗?
- 23. 触发信号流
- 24. 信号输出arduino
- 25. DBus Glib发送信号 - 没有信号被发射
- 26. Python应用程序在从回调信号中发出信号时崩溃
- 27. 从QRunnable发出信号或发布事件
- 28. QRunnable发出信号并从插槽获取发件人
- 29. Django 1.3,如何在ebay上发布帖子时发出信号?
- 30. 向量push_back在while和for循环中返回SIGABRT信号(signal 6)(C++)
看到这个答案 - http://stackoverflow.com/a/6534069/667266 – borisbn 2013-02-15 11:56:36