qcheckbox: كيفية التمييز بين التغييرات التي يسببها المستخدم على الدولة وتلك التي صنعت برمجيا؟

StackOverflow https://stackoverflow.com/questions/1856544

سؤال

هل افتقد شيئا أو لا يوجد شيء حقا (جاهز / مدمجا) لتغيير حالة Qcheckbox برمجيا دون أن ينبعث إشارة إشارة "Void Statechanged (Int)"؟

يتم استدعاء الإشارة المذكورة أعلاه بغض النظر عما إذا كان "الفراغ SETCHECTESTATES (QT: SHECKSTATE (QT: SHECKSTATE)" تم استدعاؤه أو قام المستخدم بتغيير الحالة عبر UI، ولا توجد إشارة "تدخل" مثل مع QLENEDIT.

لذلك، إذا لم تكن هناك طريقة جاهزة للتمييز بين التغييرات البرنامجية والمستحثة من قبل المستخدم على حالة Qcheckbox، والخيارات الوحيدة هي الفئة الفرعية / إضافة إشارة "تنقل" أو الاضافة مع "Void QOOBJECT :: ORCSSIGNALS (كتلة BOOL) "لماذا يجب أن يكون هذا كذلك، أي أي عدم تناسق (في كيو تي)؟

هل كانت مفيدة؟

المحلول

إذا كنت بحاجة فقط إلى إطلاع المدخلات المستخدم، استمع إلى

QAbstractButton::clicked( bool checked );

خلاف ذلك الاتصال ب

QAbstractButton::toggled( bool checked );

أو

QCheckBox::stateChanged( int state);

نصائح أخرى

النهج الذي يعمل لجميع الإشارات والحاجيات هو لف المكالمات إلى setChecked() في زوج من blockSignals() المكالمات:

const bool blocked = but->signalsBlocked();
but->blockSignals( true );
but->setChecked( true );
but->blockSignals( blocked );

أو، مع شيء سيكون لكل مبرمج كيو تي في صندوق الأدوات:

class QSignalBlocker {
    QObject * const o;
    const bool blocked;
public:
    explicit QSignalBlocker( QObject * o )
      : o( o ),
        blocked( o && o->signalsBlocked() )
    {
        if ( o ) o->blockSignals( true );
    }
    ~QSignalBlocker() { if ( o ) o->blockSignals( blocked ); }
};

أ راي صف دراسي. الاستعمال:

const QSignalBlocker blocker( but );
but->setChecked( true );

تحرير 2013-12-10: سيكون QT 5.3 مدمج QSignalBlocker.

إذا أردت أن

تغيير حالة Qcheckbox برمجيا

استعمال setcheckstate. طريقة.

PS أنا لا أفهم ماذا يعني ذلك

تغيير حالة Qcheckbox ... ينبعث من إشارة إشارة "Statechanged Saterechanged" "

ربما يجب أن تقرأ إشارات وفتحات موضوع أكثر بعناية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top