सूची में सभी उत्सर्जित संकेतों से क्यूटी आवेदन

0

सवाल

मैं एक विरासत विरासत में मिला क्यूटी जीयूआई आवेदन है । एक पहली बात यह है कि मैं क्या करने की जरूरत है लॉग फ़ाइल बनाने के लिए जहां हर उपयोगकर्ता बातचीत लॉग इन किया है, की तरह एक बटन के क्लिक के संपादन के एक QLineEdit और इतने पर । इस कारण के लिए तथ्य यह है कि उपयोगकर्ताओं को जाहिरा तौर पर नहीं कर रहे हैं बताने के लिए सक्षम होना करने के लिए कैसे पुन: पेश विशिष्ट कीड़े, तो वे चाहते हैं, जब एक बग खोला है, यह पढ़ने के लिए लॉग फ़ाइल की जाँच करने के क्रम में कदम है कि उपयोगकर्ता प्रदर्शन किया, जब वह यह पाया ।

मैंने देखा है कि यह संभव ओवरराइड करने के लिए notify विधि में QCoreApplication आदेश में प्राप्त करने के लिए सभी घटनाओं में, और यह काम करता है, लेकिन यह मैं क्या चाहते हैं नहीं है, के बाद से यह लगता है, का प्रबंधन करने के लिए केवल घटनाओं के ऑपरेटिंग सिस्टम की तरह, ध्यान केंद्रित आदि, और इसे संभाल नहीं करता है के उत्सर्जन का संकेत है.

बेशक मैं कोड बदल सकते हैं और के बीच एक कनेक्शन बनाने के लिए, उदाहरण के लिए, एक textChanged सिग्नल और लैम्ब्डा की रिपोर्ट है कि यह है, लेकिन इस मामले में मैं की आवश्यकता होगी सभी को बदलने के लिए चे कोड. वहाँ एक तरीका है करने के लिए एक ही परिणाम प्राप्त किसी अन्य तरीके से लिखना के बिना, सबसे अधिक भाग के लिए आवेदन?

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

सबसे अच्छा जवाब

1

आप कर सकते हैं सभी की सूची विजेट में अपने आवेदन का उपयोग करके QApplication::allWidgets().

फिर, आप सूची में सभी संकेतों के प्रत्येक विजेट (के साथ QObject::metaObject()) और उन्हें कनेक्ट करने के लिए एक लकड़हारा.

एक त्वरित उदाहरण है:

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ý
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में