的QApplication ::则activeWindow() - > WINDOWTITLE();将此信息保存为每秒记录一次

时间:2013-11-08 19:29:33

标签: c++ qt

我想为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

1 个答案:

答案 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