QAbstractTableModel读取数据以及QStyleItemDelegate修改数据
使用QStyleItemDelegate修改数据, 官网有QSpinBox例子,这里使用QComboBox
h头文件Class ClassMaterDelegate : public QStyleItemDelegate { Q_OBJECT public: ClassMaterDelegate(QObject* parent = nullptr); ~ClassMaterDelegate(); QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override; void setEditorData(QWidget *editor, const QModelIndex &index) const override; void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override; };
cpp实现文件ClassMaterDelegate::ClassMaterDelegate(QObject* parent) : QStyleItemDelegate(parent) { } ClassMaterDelegate::~ClassMaterDelegate() { } QWidget* ClassMaterDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const { if (!index.isValid()) { return QStyleItemDelegate::createEditor(parent, option, index); } QComboBox* pComboBox = new QComboBox(parent); std::vector classMaters = ClassMater::GetAll(); for (auto it = classMaters.begin(); it != classMaters.end(); ++it) { pComboBox->addItem(it->getName(), it->getId()); } return pComboBox; } void ClassMaterDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { if (!index.isValid()) { return ; } QString qtrName = index.model()->data(index, Qt::EditRole).toString(); QComboBox* pComboBox = static_cast(editor); int cmbIndex = pComboBox->findText(qtrName); pComboBox->setCurrentIndex(cmbIndex); } void ClassMaterDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { if (!index.isValid()) { return ; } QComboBox* pComboBox = static_cast(editor); QString qtrName = pComboBox->currentText(); model->setData(index, qtrName, Qt::EditRole); }
使用QAbstractTableModel读取和修改数据
h头文件class StudentModel : public QAbstractTableModel { public: StudentModel(Qobject* parent = nullptr); ~StudentModel(); void getAll(); const Student& getOne(int row) const; void addStudent(); void deleteStudent(int row); int rowCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; Qt::ItemFlags flags(const QModelIndex &index) const override; private: std::vector vecStrHeaders = {"姓名", "班级", "年龄"}; std::vector vecStudents; };
cpp实现文件StudentModel::StudentModel(Qobject* parent) : QAbstractTableModel(parent) { } StudentModel::~StudentModel { } StudentModel::void getAll() { beginResetModel(); vecStudents = Student::getAll(); endResetModel(); } const Student& StudentModel::getOne(int row) const { const Student& stu = vecStudents[row]; return stu; } void StudentModel::addStudent() { Student stu; stu.setName("test") stu.setClassMater(1); stu.setAge(18); if (!Student::add(stu)) { return; } beginInsertRows(QModelIndex(), 0, 0); vecStudents.insert(vecStudents.begin(), stu); endInsertRows(); } void StudentModel::deleteStudent(int row) { const Student& stu = vecStudents[row]; if (!Student::delete(stu.getId())) { return; } auto it = vecStudents.begin(); std::advance(it, row); beginRemoveRows(QModelIndex(), row, row); vecStudents.erase(it); endRemoveRows(); } int StudentModel::rowCount(const QModelIndex &parent = QModelIndex()) const { return vecStudents.size(); } int StudentModel::columnCount(const QModelIndex &parent = QModelIndex()) const { return vecStrHeaders.size(); } QVariant StudentModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) { return QVariant(); } if (role == Qt::DisplayRole || role == Qt::EditRole) { const Student& stu = vecStudents[index.row()]; switch(index.column()) { case 0: return stu.getName(); case 1: return stu.getClassMater(); case 2: return sty.getAge(); default: return QVariant(); } } return QVariant(); } QVariant StudentModel::headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const { if (!index.isValid()) { return QVariant(); } if (role == Qt::DisplayRole) { if (orientation == Qt::Horizontal) { return vecStrHeaders[section]; } } return QVariant(); } bool StudentModel::setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) { if (!index.isValid()) { return QVariant(); } if (index.column() == 1 && role == Qt::EditRole) { ClassMater classMater; bool success = ClassMater::getByName(value.toString(), classMater); if (!success) { return false; } Student& stu = vecStudents[index.row()]; stu.setClassMater(classMater.getId()); bool hasSave = Student::update(stu); if (hasSave) { this->getAll(); } return hasSave; } return false; } Qt::ItemFlags StudentModel::flags(const QModelIndex &index) const { if (!index.isValid()) { return QVariant(); } if (index.column() == 1) { return Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled; } return Qt::ItemIsSelectable | Qt::ItemIsEnabled; }
使用ui->studentList->setItemDelegateForColumn(1, new ClassMaterDelegate(this)); ui->studentList->setModel(mModel); // 头文件定义 StudentModel mModel; //设置最后一列自适应 ui->studentList->horizontalHeader()->setStretchLastSection(true); //设置选择的行为: 选择整行 ui->studentList->setSelectionBehavior(QAbstractItemView::SelectRows); //设置选择的模式: 单选模式,即只能选中一行 ui->studentList->setSelectionMode(QAbstractItemView::SingleSelection);
讨好年轻用户这一点,小米Civi做得不错,下一代新机将至说到小米这些年来颜值最高的手机,我相信绝大多数的人都有一个共同的答案小米Civi手机。是的,虽然这样一款产品是小米史上性价比最低的产品,但它给众多小米用户带来这样一个认知原来小米手
看天九共享建设数字化转型生态体系近日,工信部在推进实施中小企业数字化转型升级时明确表示,到2022年底,要组织数字化转型服务商为10万家以上中小企业提供数字化转型服务,推动10万家中小企业业务上云。在全球经济不景
京东在上海的这场豪赌,会不会赢?这个问题问得好。我觉得得从两方面看,首先京东之前因为毕业的问题上了热搜,让本来很正常的招聘解聘成为了众矢之的,这不排除有人恶意炒作。这对京东来说确实不利,京东也确实要缓解一下社会的
外卖平台抽取高额佣金,配送过程无法保质保量一些商家不愿入驻外卖平台有苦衷来源工人日报中国青年网在新冠肺炎疫情的背景下,外卖代替堂食,更加成为人们生活中的一部分。而仍有一些商家不愿意入驻外卖平台,他们有的为了菜品质量选择专心经营线下门店,有的觉得平台佣金
奇安信将开放8个研发平台北京商报讯(记者魏蔚)4月19日,奇安信董事长齐向东宣布,奇安信已有鲲鹏诺亚等8个研发平台,将通过对主要研发平台全面量产,帮助政企客户解决数字产业化遇到的问题。这一平台化战略会陆续
互联网医疗健康!汇安互联网平台合伙人招募中近年来,随着科技的高速发展和广泛应用,互联网渗透人们生活的各个领域,也潜移默化的影响着医疗行业,不断改变着人们的就医购药健康管理的方式。健康中国2030规划纲要也对促进互联网医疗健
一季度全国快递服务企业业务量同比增长10。5广州日报讯(全媒体记者张露)近日,国家邮政局官网公布2022年一季度邮政行业运行情况。数据显示,一季度,邮政行业业务收入(不包括邮政储蓄银行直接营业收入)累计完成3268。8亿元,
亚马逊推出iOS小部件无需打开APP便可快速查找产品看早报,知行情,觅商机!1亚马逊推出iOS小部件无需打开亚马逊卖家APP便可快速查找产品亚马逊美国站欧洲站和日本站发布公告称为卖家推出iOS小部件,无需打开亚马逊卖家应用程序,卖家
电商冲击实体导致失业率上涨随着时间发展电商越来越多,发展的也越来越迅猛,电商的好与坏我自己的看法!一电商把实体搞垮了导致失业率上涨,随着电商经济的发展越来越多加快了实体经济破产,导致人口失业率增加,以前没有
逐渐嚣张,使用python采集CSDN文章数据保存PDF前言嗨喽!大家好呀,这里是魔王本次必备素材wkhtmltopdf软件素材代码第三方库requestspipinstallrequestsparselpipinstallparsel
暴雪娱乐总裁暴雪没有参与NFT鞭牛士4月18日消息,前几日部分暴雪娱乐(BlizzardEntertainment)旗下游戏玩家收到了调查问卷,其中与游戏相关内容的兴趣的选项中包含了元宇宙,PlaytoEarn