我想为linux / mac / windows构建一个应用程序,它会记录哪个窗口处于活动状态以及何时更改。所有数据都应写入文本文件。
我试图使用此代码打印出活动窗口的标题:
QDebug<< “活动窗口:”<<的QApplication ::则activeWindow() - > WINDOWTITLE();
我的包括:
的QApplication QWidget的 QtGui / QApplication的 qmlapplicationviewer.h QDebug
当我调用QApplication :: activeWindow() - > windowTitle()时出现错误(应用程序输出):
该程序意外完成。
怎么了?
我正在使用Uubuntu 32位代码和QT Creator v2.4.1基于QT 4.8.0(32位)
我的完整代码:http://pastebin.com/J97rJv5a
答案 0 :(得分:0)
main
方法仅在每次启动应用程序时执行一次,如果要监视某些内容,则必须使用slots and signals mechanism执行此操作。您可以通过定义自定义类(或者您可以将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