سؤال

يوجد في تطبيقي نافذة مقسمة بواسطة QSplitter، وأحتاج إلى إزالة إحدى الأدوات.

كيف أقوم بذلك؟لا أستطيع العثور على طرق مفيدة

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

المحلول

والعديد من الأشياء في كيو تي لا يمكن أن يكون "تقليديا" إزالتها. بدلا من ذلك استدعاء اخفاء () على ذلك والتدمير ذلك. من QSplitter الوثائق:

<اقتباس فقرة>   

وعند إخفاء () طفل الفضاء إرادتها   توزع الآخر   الأطفال. سيتم إعادة عندما   تظهر لك () مرة أخرى.

نصائح أخرى

ليس من الواضح بالنسبة لي ما إذا كنت تريد الحفاظ على القطعة ووضعها في مكان آخر، أو إذا كنت تريد تدمير القطعة.

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

  • الحفاظ على القطعة: إذا قمت بالاستيلاء على المؤشر إلى عنصر واجهة المستخدم ، فيمكنك ببساطة تعيين والديه على بعض القطعة الأخرى وإضافته إلى تصميم عنصر واجهة مستخدم أخرى وسيظهر هناك.هذا آمن لأنه سيتم إخطار QSplitter بأن أحد أطفاله يتم تجديده.

إذا كنت تريد تعيين الأصل على NULL (إجابة cjhuitt) فاعلم أنك الآن مسؤول عن تنظيف تلك الذاكرة لأن الأداة لم تعد تحتوي على أحد الوالدين.

وأحب الإجابة Tuminoid ل. ولكن إذا كنت في حاجة على الاطلاق إزالته، ومحاولة الحصول على القطعة التي تريد إزالتها، والدعوة setParent( NULL ) على أن القطعة. هذا هو أفضل توقعاتي.

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

إذا لم يكن لديك مؤشر القطعة، استخدم QSplitter :: القطعة (مؤشر كثافة العمليات) وظيفة. بعد ذلك، يمكنك استخدام استدعاء لها deleteLater () فتحة.

إذا لم يكن لديك مؤشر القطعة، ولكن لا يزال لمعرفة objectName القطعة ()، ثم QObject :: findChild () هو طريقك الوحيد للحصول على مؤشر القطعة.

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

frameA->setVisible(conditionA);
frameB->setVisible(conditionB);
if ( !(conditionA && conditionB) ) // if only 1 frame is visible
{
   splitter->handle(0)->setVisible(false);
}

وهناك طريقة أخرى سهلة لمنع القطعة الطفل من الحصول على حذف لاستخدام QSplitter.takeWidget (طفل). وهذا هو أيضا الطريقة الموصى بها من إزالة القطعة من الخائن. (الوثائق كيو تي)

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