范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

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);

平均每天1。5个外资大项目落地继续加大在华科技业务投入再投资1亿美元联手打造创新高地今年以来,一批外资大项目重点项目接连落地,带动中国引资快速增长。商务部数据显示,今年前4个月,全国新增合同外资1亿美元以上大项C语言程序设计一填空题(每空1分,共10分)1。C语言的数据类型中,构造类型包括数组和。2。在C程序中,指针变量能够赋值或值。3。C目标程序经后生成扩展名为exe的可执行程序文件。4。设有定义语新方法重塑制备流程钙钛矿太阳能电池刷新世界纪录新方法重塑制备流程钙钛矿太阳能电池刷新世界纪录21。7研究人员运用涂布印刷真空沉积等技术,在国际上首次实现了大面积全钙钛矿叠层光伏组件的制备,开辟了大面积钙钛矿叠层电池的量产化商业3D打印新技术将不透明树脂制成物体可用于制造人工动脉科技日报北京5月24日电(实习记者张佳欣)瑞士洛桑联邦理工学院(EPFL)的一个工程师团队开发出一种3D打印方法,可在数秒钟内用光将不透明的树脂制成物体。这一突破或在生物医学行业有至少20家上市公司推出数字藏品交易平台仅1家披露营收占比财联社区块链日报5月25日讯(记者董宇佳),随着数字藏品热度的上升,众多上市公司初创企业甚至是国有企业争相想要挤上这条日渐拥挤的赛道。今年4月以来,蓝色光标疯狂体育汤姆猫中青宝等上影响出行屡遭吐槽共享单车成牛皮癣新宿主5月24日9时许,北京市朝阳区将台地铁站口,停满了密密麻麻的共享单车。一些共享单车的车筐里车身处,被贴满了各种小广告24小时美女服务公积金提取租房代开发票私密会所京牌指标这时正值上数字化平台加码发力乡村振兴原标题数字物流数字农业订单数字化就业齐头并进(引题)数字化平台加码发力乡村振兴(主题)今年是实施乡村振兴战略的第五年。在我国全力推进乡村振兴和数字经济的战略背景下,数字产业化产业数用基因工程为棉花涂上五颜六色谁说棉花只有白色?近日,记者从浙江理工大学获悉,该校生命科学与医药学院孙玉强教授团队通过基因工程,创制了一个棉花紫化突变体,解析了该突变体GhOMT1基因的功能缺失调控花青素累积的转让持有SpaceXShein某头部智能驾驶公司股份的专项基金LP份额资情留言板第45期资情留言板是36氪推出的新栏目。资产交易市场,信息瞬息万变,消息真假难辨,即使买卖双方花费大量的时间精力,推动成交往往困难重重。为了能够帮助买卖双方更快速链接市场信息和潜在交易对手动力电池回收利用水平持续提升(支持新能源汽车加快发展废旧动力电池回收利用调查)来源人民网人民日报核心阅读当前,不少车企落实生产者责任延伸制度,开展动力电池回收利用业务,取得了一些积极成果。但由于电池数量总体较少,回收利用产业仍处于发展初期。为应对即将到来的废花钱就能随心改?代改IP地址暗藏隐私泄露风险近日,包括微博微信知乎小红书等互联网平台陆续上线了显示IP属地的功能,国内用户显示到省份或地区,国外用户显示到国家。不少网络大V暴露了自己此前假装在国外的痕迹,主页的IP属地大多在
讨好年轻用户这一点,小米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