سؤال

ولقد لاحظت أنه عندما يتم تنفيذ setModel في موضوع الموازي ( حاولت threading.Timer أو threading.thread)، أحصل على هذا:

QObject: Cannot create children for a parent that is in a different thread.
(Parent is QHeaderView(0x1c93ed0), parent's thread is QThread(0xb179c0), current thread is QThread(0x23dce38)
QObject::startTimer: timers cannot be started from another thread
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QTreeView(0xc65060), parent's thread is QThread(0xb179c0), current thread is QThread(0x23dce38)
QObject::startTimer: timers cannot be started from another thread

هل هناك أي طريقة لحل هذه؟

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

المحلول

ووهو في الواقع حقيقة من حقائق الحياة أن استخدام مؤشرات من كيو تي (والأطر الغنية الأخرى) هي وظيفة حساسة وصعبة، وتتطلب اهتماما واضحا والرعاية - راجع <لأ href = "https://doc.qt.io /qt-4.8/threads.html "يختلط =" نوفولو noreferrer "> مستندات كيو تي في لتغطية ممتازة للموضوع (للقراء من ذوي الخبرة في خيوط بصفة عامة، مع القراءات المقترحة بالنسبة لأولئك الذين ليسوا بعد).

إذا كنت ربما يمكن، أود أن أقترح ما أقترح دائما كما أصح الهندسة المعمارية للخيوط في بيثون: دعونا تكون مملوكة كل نظام فرعي والتي يستخدمها موضوع مخصص واحد؛ التواصل بين المواضيع عبر حالات Queue.Queue، أي قبل مرور الرسالة. هذا النهج يمكن أن يكون مقيدا بعض الشيء، ولكنه يوفر أساسا جيدا على أي استثناءات على وجه التحديد التي تم تحديدها وهندستها بعناية (على أساس حمامات موضوع، مواضيع جديدة في بعض الأحيان أن ولدت، والأقفال، والمتغيرات الشرط، وغيرها من مثل هذه الأمور صعب ؛-). في هذه الفئة الأخيرة وأود أيضا تصنيف الأشياء كيو تي محددة مثل مؤشر ترابط عبر إشارة / فتحة الاتصال عبر <لأ href = "https://doc.qt.io/qt-4.8/threads-qobject.html#signals-and -slots-عبر-المواضيع "يختلط =" نوفولو noreferrer "> اتصالات قائمة الانتظار .

نصائح أخرى

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

وأو اسأل الشعبية كيو تي حول هذا الموضوع. لا يبدو محددة لباي كيوت.

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