QTableWidget中添加列表并输出
注意:这只是一个demo,项目中用到利用QTableWidget创建表,表中包含各种控件,最后保存表中的内容到doc中,此demo完成了QTableWidget中表的创建,以及将表中内容转为字符串格式输出,字符串便于存储为doc。
关键点:1、读取列表中不同控件的内容,并转为字符串。首先获取QWidget类型,用QWidget->children().at(x)找到你这个QWidget中实际控件的位置,注意x的取值取决于你创建表的时候,往QWidget里边放置的内容顺序。
2、然后你要获取的控件是什么类型你就把1中获取的QWidget强转成什么类型,如:QDateEdit *dataedit=(QDateEdit*)(widget->children().at(1));
此时就可以将获取的控件转为字符串了。
基本功能介绍:

demo里创建了两个QTableWidget控件,左侧我测试添加单一类型QLineEdit,点击add即增加一行,点击save即输出列表内容,也就是以字符串的形式获取QTableWidget表中的内容(方便输出为doc文件)。
右侧我测试添加各种类型的数据,包括QDateEdit QComboBox等类型,同样点击增加增加一行,点击保存即输出表中内容字符串。
点击“add”或“增加”:

点击“save”或“保存”:

源码:
mymainwindow.h
#ifndef MYMAINWINDOW_H
#define MYMAINWINDOW_H #include <QMainWindow>
#include <QComboBox>
#include <QSpinBox>
#include <QDateEdit>
#include <QDate>
#include<QDebug>
#include<QLineEdit>
namespace Ui {
class MyMainWindow;
} class MyMainWindow : public QMainWindow
{
Q_OBJECT public:
explicit MyMainWindow(QWidget *parent = );
~MyMainWindow(); private slots:
void on_pushButton_add_clicked(); void on_pushButton_save_clicked(); void on_pushButton_add2_clicked(); void on_pushButton_save2_clicked(); private:
Ui::MyMainWindow *ui;
void setplainWidget(int rowIndex, int colIndex);
void setDateWidget(int rowIndex, int colIndex);
void setComboxWidget(int rowIndex, int colIndex, QStringList& lstStr);
void setSpinBox(int rowIndex, int colIndex);
}; #endif // MYMAINWINDOW_H
mymainwindow.cpp
#include "mymainwindow.h"
#include "ui_mymainwindow.h" MyMainWindow::MyMainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MyMainWindow)
{
ui->setupUi(this);
} MyMainWindow::~MyMainWindow()
{
delete ui;
}
void MyMainWindow::setDateWidget(int rowIndex, int colIndex)
{
QWidget *widget;
QHBoxLayout *hLayout;
QDateEdit *dateEdit;
dateEdit = new QDateEdit();
dateEdit->setObjectName("qdateedit");
dateEdit->setAlignment(Qt::AlignHCenter);
dateEdit->setDisplayFormat("yyyy-MM-dd");
dateEdit->setDate(QDate::currentDate());
dateEdit->setCalendarPopup(true);
hLayout = new QHBoxLayout();
widget = new QWidget(ui->taskTableWidget);
hLayout->addWidget(dateEdit);
hLayout->setMargin();
widget->setLayout(hLayout);
ui->taskTableWidget->setCellWidget(rowIndex, colIndex, widget);
} void MyMainWindow::setComboxWidget(int rowIndex, int colIndex, QStringList& lstStr)
{
QWidget *widget;
QHBoxLayout *hLayout;
QComboBox *cmb;
cmb = new QComboBox();
cmb->setObjectName("qcombobox");
cmb->addItems(lstStr);
hLayout = new QHBoxLayout();
widget = new QWidget(ui->taskTableWidget);
hLayout->addWidget(cmb);
hLayout->setMargin();
widget->setLayout(hLayout);
ui->taskTableWidget->setCellWidget(rowIndex, colIndex, widget);
} void MyMainWindow::setSpinBox(int rowIndex, int colIndex)
{
QWidget *widget;
QHBoxLayout *hLayout;
QSpinBox *spinbox;
spinbox = new QSpinBox();
spinbox->setObjectName("qspinbox");
spinbox->setMinimum();
spinbox->setMaximum();
spinbox->setSingleStep();
hLayout = new QHBoxLayout();
widget = new QWidget(ui->taskTableWidget);
hLayout->addWidget(spinbox);
hLayout->setMargin();
widget->setLayout(hLayout);
ui->taskTableWidget->setCellWidget(rowIndex, colIndex, widget);
}
void MyMainWindow::setplainWidget(int rowIndex, int colIndex)
{
QWidget *widget;
QLineEdit *line;
line = new QLineEdit();
line->setText("lstStr");
widget = new QWidget(ui->taskTableWidget2);
ui->taskTableWidget2->setCellWidget(rowIndex, colIndex, line);
}
void MyMainWindow::on_pushButton_add_clicked()
{
int rowIndex = ui->taskTableWidget->rowCount();
ui->taskTableWidget->setRowCount(rowIndex + );//总行数增加1
//资料开始时间
setDateWidget(rowIndex, );
//资料结束时间
setDateWidget(rowIndex, );
QStringList lstStrYears;
for (int i = ; i <= ; i++)
{
QDateTime curDateTime = QDateTime::currentDateTime();
int curYear = curDateTime.date().year();
lstStrYears.push_back(QString::number(curYear + i));
}
lstStrYears.push_front("");
setComboxWidget(rowIndex, , lstStrYears);
//涉外情况
QStringList lstStrForegion;
lstStrForegion.push_back(QString::fromLocal8Bit(""));
lstStrForegion.push_back(QString::fromLocal8Bit("有"));
lstStrForegion.push_back(QString::fromLocal8Bit("无"));
setComboxWidget(rowIndex, , lstStrForegion);
//合同
setComboxWidget(rowIndex,, lstStrForegion);
//使行列头自适应宽度,最后一列将会填充空白部分
ui->taskTableWidget->horizontalHeader()->setStretchLastSection(true);
ui->taskTableWidget->resizeColumnsToContents();
} void MyMainWindow::on_pushButton_save_clicked()
{
int row = ui->taskTableWidget->rowCount();
int column = ui->taskTableWidget->columnCount();
QString msg;
for(int i=;i<row;++i)
{
for(int j=;j<column;++j)
{
//第一个日期类型
QWidget *widget=ui->taskTableWidget->cellWidget(i,j);
// qDebug()<<widget->children().at(1);
if ((widget->children().at())->inherits("QDateEdit"))
{
QDateEdit *dataedit=(QDateEdit*)(widget->children().at());
msg=msg.append(dataedit->date().toString("yyyy-MM-dd"))+" ";
}
//第二个QComboBox类型
else if((widget->children().at())->inherits("QComboBox"))
{
QComboBox *combox=(QComboBox*)(widget->children().at());
msg=msg.append(combox->currentText())+" ";
}
}
} qDebug()<<msg<<"\n";
} void MyMainWindow::on_pushButton_add2_clicked()
{
int rowIndex = ui->taskTableWidget2->rowCount();
ui->taskTableWidget2->setRowCount(rowIndex + );//总行数增加1
setplainWidget(rowIndex,);
setplainWidget(rowIndex,);
setplainWidget(rowIndex,);
setplainWidget(rowIndex,);
setplainWidget(rowIndex,);
//使行列头自适应宽度,最后一列将会填充空白部分
ui->taskTableWidget2->horizontalHeader()->setStretchLastSection(true);
ui->taskTableWidget2->resizeColumnsToContents();
} void MyMainWindow::on_pushButton_save2_clicked()
{
int row = ui->taskTableWidget2->rowCount();
int column = ui->taskTableWidget2->columnCount();
QString msg;
for (int i = ; i<row; i++)
{
for (int j = ; j<column; j++)
{ QWidget *widget=ui->taskTableWidget2->cellWidget(i,j);
QLineEdit *combox=(QLineEdit*)widget;
msg=msg.append(combox->text())+" "; // QString str =ui->taskTableWidget2->item(i, j)->data(Qt::DisplayRole).toString();
}
}
qDebug()<<msg;
}
如有疑惑可进行沟通指教。
QTableWidget中添加列表并输出的更多相关文章
- 在QTableWidget中添加QCheckBox并使其居中显示(转)
实现思路:把QCheckBox嵌入式到一个水平布局中 QWidget *widget; QHBoxLayout *hLayout; QCheckBox *ckb; ... ckb = ...
- QTableWidget中添加按钮
添加按钮 void QTableWidget::setCellWidget ( int row, int column, QWidget * widget ) widget可以是自己定义的按钮 cla ...
- Ext 向Ext.form.ComboBox()中添加列表的分类
1.静态 [javascript] view plaincopy var staticComboBox = new Ext.form.ComboBox({ fieldLabel:'回访结果', ...
- 点击得到QTableWidget中任意位置QPushButton的行列信息
http://www.qtcn.org/bbs/read-htm-tid-51835.html http://www.qtcn.org/bbs/simple/?t43841.html 比如(点击每行最 ...
- Python之向日志输出中添加上下文信息
除了传递给日志记录函数的参数(如msg)外,有时候我们还想在日志输出中包含一些额外的上下文信息.比如,在一个网络应用中,可能希望在日志中记录客户端的特定信息,如:远程客户端的IP地址和用户名.这里我们 ...
- 向redis中添加删除list列表
转: 向redis中添加删除list列表 2018年04月18日 15:44:54 luo_yu_1106 阅读数:4082 一.添加 向redis中添加队列有两种方式 1.lpush l是lef ...
- 【转】Python之向日志输出中添加上下文信息
[转]Python之向日志输出中添加上下文信息 除了传递给日志记录函数的参数(如msg)外,有时候我们还想在日志输出中包含一些额外的上下文信息.比如,在一个网络应用中,可能希望在日志中记录客户端的特定 ...
- 在 Wiki 标记中添加无序列表
项目:在 Wiki 标记中添加无序列表在编辑一篇维基百科的文章时,你可以创建一个无序列表,即让每个列表项占据一行,并在前面放置一个星号.但是假设你有一个非常大的列表,希望添加前面的星号.你可以在每一行 ...
- 127使用 TableView 自带的单元格样式实现好友列表,另外在单元格中添加辅助按钮
类似的做法如之前这篇随笔:114自定义UITableViewCell(扩展知识:为UITableViewCell添加动画效果) 相比之下:自定义 UITableViewCell 的内容灵活,可根据需求 ...
随机推荐
- 一些常用查询SQL语句以及显示格式
1.查询当前年.月.周相关时间 1.1.查询当前年份 SELECT TO_CHAR(SYSDATE,'YYYY') AS YEAR FROM DUAL--查询当前年份 SELECT TO_CHAR(S ...
- FastOne专业计算平台助力生命科学研发
11月16日,由AWS主办的云计算行业沙龙在中油阳光酒店举行,速石科技CEO陈熹就高性能计算如何助力生命科学领域发表了精彩的演讲. 面临的问题及挑战 在算力及高性能领域,随着行业客户的业务需求量,数据 ...
- 《C# 爬虫 破境之道》:第一境 爬虫原理 — 第一节:整体思路
在构建本章节内容的时候,笔者也在想一个问题,究竟什么样的采集器框架,才能算得上是一个“全能”的呢?就我自己以往项目经历而言,可以归纳以下几个大的分类: 根据通讯协议:HTTP的.HTTPS的.TCP的 ...
- gitbub 基本使用
一.环境 git:https://git-scm.com/ 申请github账号:https://github.com/ 二.安装git 一直next即可 三.创储存建库 1.选择New reposi ...
- 6.反编译 java---class (字节码文件)---反编译(IDEA):
- 揭秘webpack loader
前言 Loader(加载器) 是 webpack 的核心之一.它用于将不同类型的文件转换为 webpack 可识别的模块.本文将尝试深入探索 webpack 中的 loader,揭秘它的工作原理,以及 ...
- RocketMQ 解决 No route info of this topic 异常步骤
原文地址:https://blog.csdn.net/chenaima1314/article/details/79403113 rocketmq运行时提示 No route info of this ...
- error while loading shared libraries: libevent-2.1.so.6 的解决办法
执行 memcached 启动命令时,报错,提示:error while loading shared libraries: libevent-2.1.so.6: cannot open shared ...
- 用VLC搭建流媒体服务器
用vlc搭建简单流媒体服务器(UDP和TCP方式) 这段时间用到了流媒体数据传输的TCP和UDP方式,感觉vlc可以做这方面的demo,这里总结下,也方便我以后查阅. 简介 VLC主页:http:// ...
- Redis 中的数据持久化策略(AOF)
上一篇文章,我们讲的是 Redis 的一种基于内存快照的持久化存储策略 RDB,本质上他就是让 redis fork 出一个子进程遍历我们所有数据库中的字典,进行磁盘文件的写入. 但其实这种方式是有缺 ...