سؤال

انا املك QTreeView الفئة الفرعية (و QAbstractItemModel الفئة الفرعية) التي لديها رأس أفقي لطيف. أرغب في إضافة رؤوس رأسية (النزول إلى أسفل الجانب الأيسر) لمطابقة. ولكن خلافا ل QTableView الذي له عمودي منفصل (setVerticalHeader()) ورؤوس أفقية (setHorizontalHeader()), QTreeView يسمح فقط برأس واحد (setHeader()).

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

لذلك أنا أبحث عن وسيلة لإضافة رأس عمودي مناسب (أعتقد أنه سيكون فئة فرعية QHeaderView) وإلا مما يجعل رأسًا أسفل العمود الأيسر ، ولكنه يجعله بالطريقة الصحيحة.

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

المحلول

من المحتمل أن تضطر إلى "التظاهر" ولكن يجب أن تكون قادرًا على رسمها لتبدو جيدة مثل رؤوسك الأفقية.

ما عليك القيام به هو أن تكون مسؤولاً عن paintEvent لتلك الخلايا ثم استخدم النمط الحالي لرسم تحكم مخصص. شيء مثل:

//QWidget* w is the widget who's style you want
QPainter painter(this);
QStyleOptionHeader opt;
opt.initFrom(this);
opt.state = QStyle::State_None;
opt.orientation = Qt::Vertical;
opt.state |= QStyle::State_Vertical;
if (w->isEnabled())
    opt.state |= QStyle::State_Enabled;
opt.state |= QStyle::State_Active;
w->style()->drawControl(QStyle::CE_Header, &opt, &painter, w);

أسهل طريقة لتكون مسؤولة عن حدث الطلاء للخلايا التي تريدها هي إنشاء مندوب عنصر مخصص وإعادة تنفيذ virtual void paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const = 0 طريقة. يمكنك فقط بوابة اللوحة الخاصة بك إلى الفهارس التي تهتم بها وتمرير الباقي إلى الفئة الفائقة (انظر مستندات QT لهذا الفئة).

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