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
绑定信号,绑定以下这几个:
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 条评论) |