このmain
メソッドは、アプリケーションの起動ごとに 1 回だけ実行されます。何かを監視する場合は、スロットとシグナル メカニズムを使用して実行する必要があります。カスタムクラスを定義して (または、QApplication 自体をサブクラス化することもできます)、それを QApplication::focusChanged シグナルに接続することで、これを実現できます。アプリケーションのフォーカスが変わるたびに、シグナルを受け取ります。これはmain.cpp
#include <QtGui>
#include <QDeclarativeView>
#include "main.h"
Watcher::Watcher(QObject *parent)
: QObject(parent)
{
}
void Watcher::onFocusChanged(QWidget * old, QWidget * now)
{
Q_UNUSED(old);
QWidget * window;
if (now == 0) {
window = 0;
} else {
window = now->window();
}
if (window != 0) {
qDebug() << window->windowTitle();
} else {
qDebug() << "No active window";
}
}
int main(int argc, char *argv[])
{
/* No need for scoped pointer */
QApplication app(argc, argv);
/* This object will be watching for QApplication::focusChanged signal
and report that to console */
Watcher watcher;
/* We connect QApplication::focusChanged signal to appropriate Watcher's slot */
QObject::connect(
&app, SIGNAL(focusChanged(QWidget*,QWidget*)),
&watcher, SLOT(onFocusChanged(QWidget*,QWidget*)));
/* Declarative view, it could be any other widget */
QDeclarativeView view;
view.setWindowTitle("Test QML Window");
view.setSource(QUrl::fromLocalFile("test.qml"));
view.show();
return app.exec();
}
そして、main.h
このようになります
#ifndef MAIN_H
#define MAIN_H
#include <QtGui>
class Watcher : public QObject
{
Q_OBJECT
public:
Watcher(QObject *parent = 0);
public slots:
void onFocusChanged(QWidget * old, QWidget * now);
};
#endif // MAIN_H