在QTableview中实现委托、翻页、搜索功能

首先需要了解ItemDataRole,对不同的role设置不同的属性值得到自己想要的效果:
在这里插入图片描述在model中Qt::TextAlignmentRole默认设置为了居中对齐 (Qt::AlignHCenter | Qt::AlignVCenter)

效果图:
在这里插入图片描述具体如何创建委托,如何重写QAbstractTableModel,如何实现翻页或者搜索功能等一切都在源码中

将源码放在项目的文件夹中,在pro问价添加如下代码:

include($$PWD/MyTableView/MyTableView.pri)

demo测试代码:

    table_infor_t table_infor;
    table_infor.horizontalHeader=QStringList{"复选框","下拉框","数字编辑框","不同数字显示颜色","QSpinBox","进度条","图标","按钮"};

    for(int row =0;row<10;++row)
    {
        for(int col =0;col<table_infor.horizontalHeader.size();++col)
        {
            table_infor.map_contents[row][col] = 1;
        }
    }

    MyTableView *m_table_view = new MyTableView(table_infor);

    QHBoxLayout *h_layout = new QHBoxLayout();
    h_layout->addWidget(m_table_view);
    this->setLayout(h_layout);


    //第一列代理设置为 delegate_checkBox
    delegate_checkBox *checkBox_ =new delegate_checkBox();
    checkBox_->set_unchecked_name("未选中");
    checkBox_->set_checked_name("选中");
    m_table_view->tableView->setItemDelegateForColumn(0,checkBox_);

    //第二列代理设置为 delegate_comBox
    QStringList list_str{"下拉1","下拉2","下拉3","下拉4","下拉5"};
    delegate_comBox *comBox_  =new delegate_comBox(nullptr,list_str);
    m_table_view->tableView->setItemDelegateForColumn(1,comBox_);

    //第三列代理设置为 delegate_edite
    delegate_edite *edite_ = new delegate_edite();
    m_table_view->tableView->setItemDelegateForColumn(2,edite_);

    //第四列代理设置为 delegate_item
    delegate_item *item_ = new delegate_item();
    item_->pair_equal.first = 1;
    item_->pair_equal.second = QColor(Qt::red);

    item_->pair_moreThan.first = 1;
    item_->pair_moreThan.second = QColor(Qt::green);

    item_->pair_lessThan.first = 1;
    item_->pair_lessThan.second = QColor(Qt::blue);
    m_table_view->tableView->setItemDelegateForColumn(3,item_);
    m_table_view->set_delegate_index_text(0,3,1);
    m_table_view->set_delegate_index_text(1,3,2);
    m_table_view->set_delegate_index_text(2,3,0);

    //第五列代理设置为 delegate_spinBox
    delegate_spinBox *spinBox_ = new delegate_spinBox();
    m_table_view->tableView->setItemDelegateForColumn(4,spinBox_);

    //第六列代理设置为 delegate_button
    ProgressBarDelegate *progress_ =new ProgressBarDelegate();
    m_table_view->tableView->setItemDelegateForColumn(5,progress_);


    //第八列代理设置为 delegate_button
    delegate_button *button_ =new delegate_button(QStringList{"读取","设置"});
    connect(button_,&delegate_button::signal_clicked,this,[=](int button_index,const QModelIndex &index)
    {
        qDebug()<<"button_index:"<<button_index<<"index:"<<index;
    });
    m_table_view->tableView->setItemDelegateForColumn(7,button_);

    for(int i=0;i<table_infor.row;++i)
    {
        m_table_view->set_delegate_index_text(i,2,(i+1)*5);
        //设置背景色
        m_table_view->set_index_text(i,2,QColor(Qt::cyan),Qt::BackgroundRole);
        //设置前景色
        m_table_view->set_index_text(i,4,QColor(Qt::darkYellow),Qt::ForegroundRole);

        m_table_view->set_delegate_index_text(i,5,(i+1)*5);
        //设置图标
        QIcon icon = QApplication::style()->standardIcon(QStyle::SP_ArrowRight);
        m_table_view->set_index_text(i,6,icon,Qt::DecorationRole);
    }
  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
QTableViewQt常用的用于显示数据库表格数据的控件之一。使用QTableView结合数据库,我们可以通过委托(Delegate)来对表格的数据进行自定义的展示或编辑。 委托Qt框架用于控制视图数据显示和编辑的重要概念。在QTableView使用委托有两个主要目的:一是为了实现对表格特定列或单元格的特殊展示效果,如自定义的复选框或按钮等;二是为了在编辑模式下提供特殊的编辑器,以便用户能够输入或选择特定类型的数据。 在使用委托时,我们需要继承QStyledItemDelegate类,并重写其的一些方法来实现自定义的显示和编辑效果。根据需求,可以选择重写paint()方法来绘制特殊的展示效果,或者重写createEditor()方法来创建特定的编辑器,再通过setEditorData()和setModelData()方法来处理数据的显示和保存。 在QTableView设置委托,我们可以使用setItemDelegate()方法为整个表格或指定的列设置委托实例。通常,我们可以在创建QTableView实例之后,通过创建委托实例并将其与视图关联,来实现对数据的自定义展示效果和编辑方式。 总之,使用QTableView结合数据库时,可以通过委托实现对表格数据的自定义展示和编辑。通过继承QStyledItemDelegate类并重写其方法,可以实现特殊的显示效果和编辑器。通过setItemDelegate()方法,可以将委托应用到整个表格或指定的列委托的应用让表格数据的展示和编辑更加灵活和个性化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值