首页 > 作文

C/C++ Qt TableDelegate 自定义代理组件使用详解

更新时间:2023-04-03 23:43:28 阅读: 评论:0

tabledelegate 自定义代理组件的主要作用是对原有表格进行调整,例如默认情况下table中的缺省代理就是一个编辑框,我们只能够在编辑框内输入数据,而有时我们想选择数据而不是输入,此时就需要重写编辑框实现选择的效果,代理组件常用于个性化定制table表格中的字段类型。

在自定义代理中qabstractitemdelegate是所有代理类的抽象基类,我们继承任何组件时都必须要包括如下4个函数:

createeditor() 用于创建编辑模型数据的组件,例如(qspinbox组件)te头文字d第七部ditordata() 从数据模型获取数据,以供widget组件进行编辑tmodeldata() 将widget组件上的数据更新到数据模型updateeditorgeometry() 给widget组件设置一个合适的大小

此处我们分别重写三个代理接口,其中两个combox组件用于选择婚否,spinbox组件用于调节数值范围,先来定义三个重写部件。

重写接口spindelegate.cpp代码如下.

#include "spindelegate.h"#include <qspinbox>qwintspindelegate::qwintspindelegate(qobject *parent):qstyleditemdelegate(parent){}// https://www.cnblogs.com/lysharkqwidget *qwintspindelegate::createeditor(qwidget *parent,const qstyleoptionviewitem &option, const qmodelindex &index) const{//创建代理编辑组件    q_unud(option);    q_unud(index);    qspinbox *editor = new qspinbox(parent); //创建一个qspinbox    editor->tframe(fal); //设置为无边框    editor->tminimum(0);    editor->tmaximum(10000);    return editor;  //返回此编辑器}void qwintspindelegate::teditordata(qwidget *editor,const qmodelindex &index) const{//从数据模型获取数据,显示到代理组件中//获取数据模型的模型索引指向的单元的数据    int value = index.model()->data(index, qt::editrole).toint();    qspinbox *spinbox = static_cast<qspinbox*>(editor);  //强制类型转换    spinbox->tvalue(value); //设置编辑器的数值}void qwintspindelegate::tmodeldata(qwidget *editor, qabstractitemmodel *model, const qmod诺的歌词elindex &a化验员岗位职责mp;index) const{//将代理组件的数据,保存到数据模型中    qspinbox *spinbox = static_cast<qspinbox*>(editor); //强制类型转换    spinbox->interprettext(); //解释数据,如果数据被修改后,就触发信号    int value = spinbox->value(); //获取spinbox的值    model->tdata(index, value, qt::editrole); //更新到数据模型}void qwintspindelegate::updateeditorgeometry(qwidget *editor, const qstyleoptionviewitem &option, const qmodelindex &index) const{//设置组件大小    q_unud(index);    editor->tgeometry(option.rect);}

重写接口floatspindelegate.cpp代码如下.

#include "floatspindelegate.h"#include <qdoublespinbox>qwfloatspindelegate::qwfloatspindelegate(qobject *parent):qstyleditemdelegate(parent){}qwidget *qwfloatspindelegate::createeditor(qwidget *parent,   const qstyleoptionviewitem &option, const qmodelindex &index) const{    q_unud(option);    q_unud(index);    qdoublespinbox *editor = new qdoublespinbox(parent);    editor->tframe(fal);    editor->tminimum(0);    editor->tdecimals(2);    editor->tmaximum(10000);    return editor;}void qwfloatspindelegate::teditordata(qwidget *editor,                      const qmodelindex &index) const{    float value = index.model()->data(index, qt::editrole).tofloat();    qdoublespinbox *spinbox = static_cast<qdoublespinbox*>(editor);    spinbox->tvalue(value);}// https://www.cnblogs.com/lysharkvoid qwfloatspindelegate::tmodeldata(qwidget *editor, qabstractitemmodel *model, const qmodelindex &index) const{    qdoublespinbox *spinbox = static_cast<qdoublespinbox*>(editor);    spinbox->interprettext();    float value = spinbox->value();    qstring str=qstring::asprintf("%.2f",value);    model->tdata(index, str, qt::editrole);}void qwfloatspindelegate::updateeditorgeometry(qwidget *editor, const qstyleoptionviewitem &option, const qmodelindex &index) const{    editor->tgeometry(option.rect);}

重写接口comboxdelegate.cpp代码如下.

#include "comboxdelegate.h"#include <qcombobox>qwcomboboxdelegate::qwcomboboxdelegate(qobject *parent):qitemdelegate(parent){}qwidget *qwcomboboxdelegate::createeditor(qwidget *parent,const qstyleoptionviewitem &option, const qmodelindex &index) const{    qcombobox *editor = new qcombobox(parent);    editor->additem("已婚");    editor->additem("未婚");    editor->additem("单身");    return editor;}// https://www.cnblogs.com/lysharkvoid qwcomboboxdelegate::teditordata(qwidget *editor, const qmodelindex &index) const{    qstring str = index.model()->data(index, qt::editrole).tostring();    qcombobox *combobox = static_cast<qcombobox*>(editor);    combobox->tcurrenttext(str);}void qwcomboboxdelegate::tmodeldata(qwidget *editor, qabstractitemmodel *model, const qmodelindex &index) const{    qcombobox *combobox = static_cast<qcombobox*>(editor);    qstring str = combobox->currenttext();    model->tdata(index, str, qt::editrole);}void qwcomboboxdelegate::updateeditorgeometry(qwidget *editor,co南昌交通学院nst qstyleoptionviewitem &option, const qmodelindex &index) const{    editor->tgeometry(option.rect);}

将部件导入到mainwindow.cpp中,并将其通过ui->tableview->titemdelegateforcolumn(0,&intspindelegate);关联部件到指定的table下标索引上面。

#include "mainwindow.h"#include "ui_mainwindow.h"// https://www.cnblogs.com/lysharkmainwindow::mainwindow(qwidget *parent): qmainwindow(parent), ui(new ui::mainwindow){    ui->tupui(this);    // 初始化模型数据    model = new qstandarditemmodel(4,6,this);      // 初始化4行,每行六列    lection = new qitemlectionmodel(model);    // 关联模型    ui->tableview->tmodel(model);    ui->tableview->tlectionmodel(lection);    // 添加表头    qstringlist headerlist;    headerlist << "序号" << "姓名" << "年龄" << "性别" << "婚否" << "薪资";    model->thorizontalheaderlabels(headerlist);    // 批量添加数据    qstringlist datalist[3];    qstandarditem *item;    datalist[0] << "1001" << "admin" << "24" << "男" << "已婚" << "4235.43";    datalist[1] << "1002" << "lyshark" << "23" << "男" << "未婚" << "10000.21";    datalist[2] << "1003" << "lucy" << "37" << "女" << "单身" << "8900.23";    int array_length = datalist->length();                          // 获取每个数组中元素数    int array_count = sizeof(datalist) / sizeof(datalist[0]);       // 获取数组个数    for(int x=0; x<array_count; x++)    {        for(int y=0; y<array_length; y++)        {            // std::cout << 挨打作文datalist[x][y].tostdstring().data() << std::endl;            item = new qstandarditem(datalist[x][y]);            model->titem(x,y,item);        }    }    // 为各列设置自定义代理组件    // 0,4,5 代表第几列 后面的函数则是使用哪个代理类的意思    ui->tableview->titemdelegateforcolumn(0,&intspindelegate);    ui->tableview->titemdelegateforcolumn(4,&comboboxdelegate);    ui->tableview->titemdelegateforcolumn(5,&floatspindelegate);}mainwindow::~mainwindow(){    delete ui;}

代理部件关联后,再次运行程序,会发现原来的tablewidget组件中的编辑框已经替换为了选择框等组件:

到此这篇关于c/c++ qt tabledelegate 自定义代理组件使用详解的文章就介绍到这了,更多相关c++ qt tabledelegate 自定义代理组件内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-03 23:43:27,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/a4476a9c636efdac3a58b79bc95743c9.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:C/C++ Qt TableDelegate 自定义代理组件使用详解.doc

本文 PDF 下载地址:C/C++ Qt TableDelegate 自定义代理组件使用详解.pdf

标签:组件   数据   重写   自定义
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图