سؤال

كيف تغير سلوك أ QListWidget بحيث يقيم ارتفاعه بدلاً من اختيار ارتفاع (على ما يبدو تعسفي) وإضافة أشرطة التمرير؟ انظر لقطة الشاشة:

screen shot

ال QListViewيجب أن تملأ مساحة أكبر قدر الإمكان (إنشاء أكبر عدد ممكن من "الأعمدة" ، إذا صح التعبير). ثم يلفون ويجعلون أكبر عدد من الصفوف ضرورية لتناسب جميع العناصر. يجب ضبط هذه الحسابات عند تغيير حجم النافذة. العمل يسير بشكل جيد.

ومع ذلك ، ما أنا يريد الحدوث هو أنه بدلاً من ارتفاع البقاء على حاله ، QListView يجب أن تنمو أو تتقلص عموديًا ولا تحتاج أبدًا إلى أي أشرطة تمرير. سيتم التعامل مع التمرير ، إذا لزم الأمر ، على الوالد QWidget التي تستضيف جميع العلامات والقوائم. يبدو أنه مرة واحدة ارتفاع QListWidget تم تأسيسه (غير متأكد من أين يأتي الافتراضي) ، فهو لا يتغير أبدًا. إنها كبيرة جدًا في بعض الحالات (انظر قائمة "الاختبار" الثانية أعلاه) وصغيرة جدًا في حالات أخرى (انظر قائمة "الخرائط الفارغة الأولى" أعلاه.)

التصميم أعلاه ليس مفاجئًا: اثنان QLabelو اثنين QListWidgetفي أ QVBoxLayout. فيما يلي الخصائص التي حددتها على QListWidget'س:

setMovement(QListView::Static);
setResizeMode(QListView::Adjust);
setViewMode(QListView::IconMode);
setIconSize(QSize(128, 128));

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

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

المحلول

ربما يمكنك هذا دون استخدام QListWidget. تحتوي أمثلة QT على فئة تخطيط جديدة ، QFlowLayout ، والتي قد تكون مفيدة. مع النوع التالي من التسلسل الهرمي عنصر واجهة المستخدم ، يمكنك الحصول على مجموعات متعددة مع الملصقات وسيكونون جميعًا داخل Qscrollarea.

QScrollBox
  QVBoxLayout

    QLabel "Blank maps"
    QWidget
       QFlowLayout
          your own widgets showing map images and labels

    QLabel "Text"
    QWidget
       QFlowLayout
          your own widgets

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

نصائح أخرى

هناك وظيفة عضو محمية تسمى contentsSize() في QListView. يتم استخدامه لحساب المطلوب minimum(), maximum(), ، و pageStep() لأشرطة التمرير (كما ذكرنا هنا).

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

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