A better display item replace method

This commit is contained in:
Krad
2021-12-08 17:49:11 +08:00
parent a65d293fb2
commit 35570a7cb4
2 changed files with 13 additions and 7 deletions

View File

@@ -5,15 +5,20 @@
#include "AccountRoleComboDelegate.h"
#include <QComboBox>
#include <QPainter>
#include <QStyleOptionViewItem>
#include "db/SQLHelper.h"
AccountRoleComboDelegate::AccountRoleComboDelegate(QWidget *parent):QItemDelegate(parent) {
SQLHelper::QueryMap("select RoleID,RoleName from Role",map);
}
//之前使用重写paint来实现了替换显示文字效果一般
//
//void AccountRoleComboDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const {
// QItemDelegate::paint(painter, option, index);
//}
void AccountRoleComboDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const {
QString text = index.model()->data(index, Qt::DisplayRole).toString();
//相较于直接在paint里面操作这是一个更好的选择可以直接改变Display而不影响前后景的绘制。
void AccountRoleComboDelegate::drawDisplay(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect,
const QString &text) const {
//绘制文本
painter->drawText(option.rect, Qt::TextWordWrap | Qt::AlignCenter , map[text].toString());
}

View File

@@ -12,9 +12,10 @@ class AccountRoleComboDelegate:public QItemDelegate {
Q_OBJECT
public:
explicit AccountRoleComboDelegate(QWidget *parent = nullptr);
void paint(QPainter *painter,
const QStyleOptionViewItem &option,
const QModelIndex &index) const override;
protected:
void drawDisplay(QPainter *painter, const QStyleOptionViewItem &option,
const QRect &rect, const QString &text) const override ;
private:
QAbstractItemModel* model = nullptr;
QMap<QString,QVariant> map ;