كيف يمكنني أن أخبر QT أن تظهر دائمًا محررًا في QTableView؟

StackOverflow https://stackoverflow.com/questions/528366

  •  22-08-2019
  •  | 
  •  

سؤال

لقد حصلت على QTableView والتي أريد عرض العمود الأخير دائمًا في وضع التحرير. (إنه QCombobox حيث يجب أن يكون المستخدم قادرًا دائمًا على تغيير القيمة.)

أعتقد أنني رأيت الحل في وثيقة QT, ، لكن لم أعد أجدها. هل هناك طريقة بسيطة للقيام بذلك؟

أعتقد أنني أستطيع أرشفة هذا التأثير باستخدام openPersistentEditor() لكل خلية ، لكنني أبحث عن طريقة أفضل. (مثل تحديده مرة واحدة فقط للعمود بأكمله.)

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

المحلول

هناك احتمالان:

استخدام setIndexWidget, ، لكن Trolltech يكتب:

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

(ويكسر نمط النموذج/العرض ...)

أو باستخدام مندوب paint طريقة. ولكن عليك هنا تنفيذ كل شيء مثل العناصر الممكّنة/المعوقة بنفسك.

نصائح أخرى

تتمثل إحدى طرق الحصول على سلوك التحرير التلقائي في استدعاء وظيفة SetDitTriggers () في العرض مع قيمة QabstractItemView :: AlleditTriggers.

لعرض محتويات عمود معين بطريقة معينة ، ألق نظرة على QabstractItemView :: SetItemDelegateForColumn (). سيتيح لك ذلك تحديد مندوب مخصص فقط لتلك العناصر التي تحتاج إليها. ومع ذلك ، لن يقوم تلقائيًا بإنشاء عنصر واجهة تحرير لكل منهم (يمكن أن يكون هناك من حيث المبدأ آلافهم) ، ولكن يمكنك استخدام المندوب لتقديم كل عنصر بطريقة تجعله يبدو وكأنه عنصر واجهة تحرير.

ال QabstractItemModel::أعلام يتم استدعاء الوظيفة الافتراضية لاختبار ما إذا كان عنصرًا قابلاً للتحرير (انظر qt :: usesisterable). ألق نظرة على جعل النموذج قابل للتحرير في ال النموذج/عرض البرمجة توثيق.

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

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