سؤال

أقوم بتطوير برنامج Aquistion. أرغب في تشغيل وظيفة العرض في مؤشر ترابط منفصل (لضمان عرض مباشر لسهولة التقاط الصور). في الوقت الحالي ، أقوم بتصنيف Qobject ، وإنشاء DisplayObject واستخدام وظيفة QTHread :: MovetOthRead. المشكلة هي أن DisplayObject يجب أن يتفاعل مع واجهة المستخدم الرسومية (يجب عرض الصور في كائنات QGraphicsView). ما هي أفضل طريقة (والأكثر أناقة) للقيام بذلك؟

الحل الحالي:

class DisplayObject : public QObject
{
    Q_OBJECT
    public:
        inline void addDetectorSystem(cci::PGR* system);
        inline void connectGui(ImageAquisition* gui);

    public slots:
        void display();

    private:
        cci::PGR* camSystem;
        ImageAquisition* guiClass;
};

تتم تهيئة DisplayObject على النحو التالي:

  DisplayObject Displayer;
        Displayer.addDetectorSystem(PGRSystem);
        Displayer.connectGui(this);
        QThread thread;
        Displayer.moveToThread(&thread);
        connect(this, SIGNAL(display()), &Displayer, SLOT(display()));
        thread.start();

لقد نسيت أن أعترف ، أنه لا يعمل ...

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

المحلول

يمكنك استخدام Qimage في المواضيع غير UI. هذا من شأنه أن يتيح لك القيام بالتقاط/رسم إلى صورة. بمجرد أن تكون الصورة جاهزة لعرضها ، يمكنك بعد ذلك إصدار إشارة مع الصورة. يجب أن يحتوي عنصر واجهة المستخدم على فتحة متصلة بتلك الإشارة التي تأخذ الصورة المحددة وتحديث نفسها لرسم تلك الصورة.

باستخدام الإشارات والفتحات ، يجب نقل البيانات بطريقة آمنة مؤشرات الترابط. باستخدام Qimages في مؤشرات الترابط الأخرى ، يمكنك الرسم ، والاجتماع الرئيسي هو المسؤول فقط عن تحديث الصور التي تم إنشاؤها ، بدلاً من قضاء الكثير من الوقت في معالجتها.

نصائح أخرى

بشكل عام ، فإن واجهة المستخدم الرسومية هي الخيط الرئيسي ويتم أي عمل في خيوط الخلفية.
وذلك لأن الخيط الرئيسي يحتاج إلى التعامل مع الأحداث الماوس ، إعادة الرسم ، أيقونة ، إلخ

الشيء الجميل في QT هو أنه يمكنك إرسال فتحات/إشارات بين المواضيع.

يرى الخيوط في كيو تي للحصول على نظرة عامة.

هناك أيضا جديد جيد كتاب QT المتقدم الذي يغطي threadign بالتفصيل

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