سؤال

لدي QtableView متصلة مع QSQLTableModel.
في العمود الأول، هناك تواريخ فقط في هذا التنسيق: 2010-01-02
أريد أن يظهر هذا العمود تاريخ هذا التنسيق (ولكن دون تغيير البيانات الحقيقية): 02.01.2010
أعلم أنه لا بد لي من إنشاء qitemdelegate لهذا العمود، لكنني لا أعرف كيف يمكنني قراءة البيانات الموجودة والكتابة عليه بشيء مختلف. لديك أي فكرة عن كيفية إدارة ذلك؟

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

المحلول

لا يغير مفوض العنصر بالضرورة البيانات، فهو يجعل البيانات فقط. أيضا، إذا كنت تستخدم QT 4.4 أو Newer، فابحث في QSTYLEDEMDELEGATE بدلا من ذلك - إنها تدركها وسوف تبدو أجمل.

هناك مثال من مفوضات البند في هذه المقالة (يبدو أن مرآة من الوثائق الرسمية التي هي الآن معطلة أو ذهبت).

نظرا لأن كل ما تريد فعله حقا هو تخصيص النص، فقد فكرت في استخدام نموذج وكيل بدلا من ذلك فقط وإرجاع QString الخاص بك مخصص لعملية Date Date Recordrole؟

نصائح أخرى

أبسط الحل هو إنشاء QStyledItemDelegate Subclass وإعادة تشغيل displayText(...) بمعنى آخر

class DateFormatDelegate : public QStyledItemDelegate
{
public:
 DateFormatDelegate (QString dateFormat, QObject *parent = 0) : 
  QStyledItemDelegate(parent),
  m_dateFormat(dateFormat)
 {
 }

 virtual QString displayText(const QVariant & value, const QLocale & locale ) const
 {
  Q_UNUSED(locale);
  return value.toDate().toString(m_dateFormat);
 }

private:
 QString m_dateFormat;
};

ثم في رأيك -

setItemDelegateForColumn(/*date column*/, new DateFormatDelegate("MM.dd.yyyy", this));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top