목록 모든 신호에서 방출되는 qt 응용 프로그램

0

질문

나는 상속되거 qt gui 응용 프로그램. 중 하나 먼저는 내가 필요로 하는 로그 파일을 만드는 모든 사용자 상호 작용 기록,같은 버튼을 클릭,편집의 QLineEdit 및니다. 이는 사실로 인해 사용자의 분명히 말할 수 없을 재현하는 방법을 보시려 버그,그래서 그들은 원하면 버그가 열리고,이것을 읽는 로그 파일을 확인하기 위해서는 단계를 수행한 사용자는 그 때 그것을 발견했습니다.

나는 본 적이 가능하다는 것을 재정의 notify 방법 QCoreApplication 을 얻기 위해서 모든 이벤트,그리고 그것은 작동하지만,그것은 내가 원하지 않는 것,이것만 관리 이벤트를 운영 체제의 초점을 맞추는 등,그리고 그것을 처리하지 않 발광 소자의 신호입니다.

물론 내가 코드 변경을 만들 사이의 연결을,예를 들어, textChanged 신호 및 람다를 보고하는 그것은,그러나 이 경우에 변경이 필요한 모든 che 코드입니다. 이 있을 달성하는 방식 같은 결과는 다른 방법으로,시작부분의 응용 프로그램?

events logging qcoreapplication qt
2021-11-22 10:41:12
1

최고의 응답

1

당신이 목적지에 위젯을 사용하여 응용 프로그램 QApplication::allWidgets().

그런 다음,목록 수있는 모든 신호를 각각의 위젯( QObject::metaObject()다)및 그들을 연결하는 logger.

간단한 예제:

class Spy: public QObject {
    Q_OBJECT
public:
    Spy();
public slots:
    void log();
};

void Spy::log()
{
    auto i = senderSignalIndex(); // The signal that fired this slot
    auto signal = sender()->metaObject()->method(i);
    qDebug() << sender() << signal.methodSignature();
}
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    Spy* spy = new Spy();

    QMetaMethod log = spy->metaObject()->method(spy->metaObject()->indexOfSlot("log()")); // in order to use the right QObject::connect signature

    for (auto widget: a.allWidgets())
    {
        auto metaObject = widget->metaObject();
        for (int i = 0; i != metaObject->methodCount(); ++i)
        {
            auto method = metaObject->method(i);
            if (method.methodType() != QMetaMethod::Signal) // We want to connect all the signals. We don't care about the other methods
                continue;

            widget->connect(widget, method, spy, log);
        }
    }
    return a.exec();
}

당신을 개선해야 하는 경우에는 코드를 매개변수를 표시.

필터링할 수도 있습니다 개체 로그만 중요한 신호를(예,만 기록 clicked 에서 신호 버튼 사용)

2021-11-22 12:57:01

감사합니다,이것은 매우 유용합니다.
Jepessen

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................