كيف يمكنني أن أرث من كل من QWidget و QTREAD؟
سؤال
لدي فصل مثل هذا
class GUI : public QWidget, public QThread
عندما أفعل ما سبق ، أحصل على أخطاء حول إشارات الاتصال. The error says Reference to "connect" is ambiguous
. هل هناك طريقة للوراثة من كليهما؟
شكرًا لك
المحلول
لا يمكنك. كلاهما QWidget
و QThread
وراثة (غير مشوهة) من QObject
. لذلك ليس لديك اشتقاق افتراضي ، وبالتالي نسختين من QObject
, الذي يربك المترجم. QObject
تم تصميمه على وجه التحديد بهذه الطريقة. يرى:
- http://lists.trolltech.com/qt-interest/2006-10/msg00711.html
- http://www.qtforum.org/article/23295/problem-opening-the-qfiledialog.html
هناك بعض الذين يزعمون أنه يدور حول هذا (لا يمكن العثور على الرابط في الوقت الحالي ، لكنه موجود على Google ، واجهت نفس المشكلة قبل أسبوعين) ، لكنها غير آمنة في أحسن الأحوال.
تحرير: أفضل طريقة على الأرجح هي أن يكون هناك كائن آخر يرث من QTREAD والحفاظ على هذا الكائن كعضو في GUI
صف دراسي. هذا هو نوع من الحل البديل الذي يفعله معظم الناس في هذا الشأن.
نصائح أخرى
QWidgets
والكائنات المرتبطة واجهة المستخدم الرسومية لا تكون في مؤشرات ترابط مختلفة عن مؤشر الترابط الرئيسي للتطبيق. يجب ألا ترث كلاهما. لا يمكنك أيضًا الاتصال بـ moveToThread()
وظيفة عنصر واجهة مستخدم.
لا يمكنك أن ترث من Qobjects متعددة.
يمكنك أن ترث من واحد وجعل الآخر متغير عضو والعمل من هناك.
class GUI : public QWidget
{
QThread myThread;
};
هل قمت بتسمية واجهة المستخدم الرسومية الخاصة بك - هل هذا هو واجهة المستخدم الرسومية الرئيسية لبرنامجك؟ انظر الأمثلة في مجلد أمثلة QT - لديهم عينة من برامج على حد سواء واجهة المستخدم الرسومية و الخيوط.