首页 > 作文

C/C++表格组件Qt TableWidget应用详解

更新时间:2023-04-03 23:35:22 阅读: 评论:0

tablewidget 表格结构组件,该组件可以看作是treewidget树形组件的高级版,表格组件相比于树结构组件灵活性更高,不仅提供了输出展示二维表格功能,还可以直接对表格元素直接进行编辑与修改操作,表格结构分为表头,表中数据两部分,表格结构可看作一个二维数组,通过数组行列即可锁定特定元素,如下代码是针对表格结构的基本使用方法,分别实现了表头数据的初始化,元素的插入等基本操作。

在研究widget组件之前先来熟悉一下view组件,view组件相对widget组件来说只是不具备编辑功能,其他功能保持一致,view组件支持与数据库建立映射关系,如果表格无需更新则最好可以使用view组件,view组件创建表格代码如下。

#include "mainwindow.h"#include "ui_mainwindow.h"#include <iostream>#include <qstandarditemmodel>qstandarditemmodel *model = new qstandarditemmodel();mainwindow::mainwindow(qwidget *parent): qmainwindow(parent), ui(new ui::mainwindow){    ui->tupui(this);    // 初始化tableview表头    model->tcolumncount(3);    model->theaderdata(0,qt::horizontal,qstring("账号"));    model->theaderdata(1,qt::horizontal,qstring("用户"));    model->theaderdata(2,qt::horizontal,qstring("年龄"));    ui->tableview->tmodel(model);    ui->tableview->horizontalheader()->tdefaultalignment(qt::alignleft);  // 表头居左显示    //设置列宽    ui->tableview->tcolumnwidth(0,101);    ui->tableview->tcolumnwidth(1,102);}mainwindow::~mainwindow(){    delete ui;}// 对表格添加数据// /d/file/titlepic/lysharkvoid mainwindow::on_pushbutton_clicked(){    for(int i = 0; i < 5; i++)    {        model->titem(i,0,new qstandarditem("20210506"));        //设置字符颜色        model->item(i,0)->tforeground(qbrush(qcolor(255, 0, 0)));        //设置字符位置        model->item(i,0)->ttextalignment(qt::aligncenter);        model->titem(i,1,new qstandarditem(qstring("lyshark")));        model->titem(i,2,new q石柱山standarditem(qstring("24")));    }}

代码运行效果如下:

widget组件的初始化与view组件基本保持一致,当程序运行时,首先在构造函数中执行以下代码,对表格进行初始化。

// /d/file/titlepic/lysharkmainwindow::mainwindow(qwidget *parent): qmainwindow(parent), ui(new ui::mainwindow){    ui->tupui(this);    qstringlist header;    header << "姓名" << "性别" << "年龄";    ui->tablewidget->tcolumncount(header.size());                        // 设置表格的列数    ui->tablewidget->thorizontalheaderlabels(header);                    // 设置水平头    ui->tablewidget->trowcount(5);                                       // 设置总行数    ui->tablewidget->tedittriggers(qabstractitemview::noedittriggers);   // 设置表结构默认不可编辑    // 初始化右侧的编辑框等属性    ui->radiobutton->tchecked(true);    ui->lineedit_1->ttext("");    ui->lineedit_2->ttext("");    // 填充数据    qstringlist namelist;    namelist << "lyshark a" << "lyshark b" << "lyshark c";    qstringlist xlist;    xlist << "男" << "男" << "女";    qint32 agelist[3] = {22,23,43};    // 针对获取元素使用 namelist[x] 和使用 namelist.at(x)效果相同    for(int x=0;x< 3;x++)    {        int col =0;        // 添加姓名        ui->tablewidget->titem(x,col++,new qtablewidgetitem(namelist[x]));        // 添加性别        ui->tablewidget->titem(x,col++,new qtablewidgetitem(xlist.at(x)));        // 添加年龄        ui->tablewidget->titem(x,col++,new qtablewidgetitem( qstring::number(agelist[x]) ) );    }}mainwindow::~mainwindow(){    delete ui;}

代码运行效果如下:

接着就是对ui中的按钮增加一些绑定事件,此处我们就通过connect绑定信号,绑定以下这几个:

•ui->pushbutton 绑定添加信号•ui->pushbutton_2 绑定删除信号•ui->pushbutton_3 绑定获取单元格信号•ui->pushbutton_4 绑定修改信号

增加添加按钮信号: 给添加按钮绑定一个信号槽,点击按钮添加

    connect(ui->pushbutton,&qpus孟良崮战役真相hbutton::clicked,[=](){        qstring uname = ui->lineedit_1->text();        qstring ux = "男";        int uage = 0;        if(ui->radiobutton->ischecked())            ux = "男";        if(ui->radiobutton_2->ischecked())            ux = "女";        uage =(ui->lineedit_2->text()).toint();        // 添加之前,先判断uname是否存在于tablewidget中,如果存在返回0不存在返回1        bool impty = ui->tablewidget->findit夜雨寄北原文及翻译ems(uname,qt::matchexactly).empty();        if(impty)        {            ui->tablewidget->inrtrow(0);    // 在行首添加一行空列表            ui->tablewidget->titem(0,0,new qtablewidgetitem(uname));            ui->tablewidget->titem(0,1,new qtablewidgetitem(ux));            ui->tablewidget->titem(0,2,new qtablewidgetitem( qstring::number(uage)));        }    });

增加删除按钮信号: 点击按钮删除选中行

    connect(ui->pushbutton_2,&qpushbutton::clicked,[=](){        bool impty = ui->tablewidget->finditems(ui->lineedit_1->text(),qt::matchexactly).empty();        if(!impty)        {            // 定位到所在行行号            int row = ui->tablewidget->finditems(ui->lineedit_1->text(),qt::matchexactly).first()->row();            // 释放资源            ui->tablewidget->removerow(row);        }    });

增加释放单元格按钮信号: 获取当前选中单元,并释放当前单格

    connect(ui->pushbutton_3,&qpushbutton::clicked,[=](){        int row = ui->tablewidget->currentrow();        std::cout << row << std::endl;        qtablewidgetitem *table =  ui->tablewidget->currentitem();        delete(table);    });

增加修改单元格按钮信号: 添加修改指定内容的处理流程

    connect(ui->懒羊羊经典语录;pushbutton_4,&qpushbutton::clicked,[=](){        qtablewidgetitem *cellitem;        // 取出当前选计算机英语教程中行        int curr_row = ui->tablewidget->currentrow();        // 循环列数        // /d/file/titlepic/lyshark        for(int col=0; col<ui->tablewidget->columncount(); col++)        {            // 寻找到当前列的指针            cellitem = ui->tablewidget->item(curr_row,col);            // 循环输出列名称            std::cout << cellitem->text().tostdstring().data() << std::endl;            // 先来处理第一个姓名,读出来并写回到列表第0列            if(col == 0)                cellitem->ttext(ui->lineedit_1->text());            // 判断性别,并分别写回到第1列            if(col == 1)            {                if(ui->radiobutton->ischecked())                    cellitem->ttext("男");                if(ui->radiobutton_2->ischecked())                    cellitem->ttext("女");            }            // 判断年龄,并写回到第3列            if(col == 2)                cellitem->ttext(ui->lineedit_2->text());        }    });

信号绑定后,代码运行效果如下:

到此这篇关于c/c++表格组件qttablewidget应用详解的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持www.887551.com。

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

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

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

本文word下载地址:C/C++表格组件Qt TableWidget应用详解.doc

本文 PDF 下载地址:C/C++表格组件Qt TableWidget应用详解.pdf

标签:组件   表格   绑定   信号
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图