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 的内容灵活,可根据需求 ...
随机推荐
- ArcEngine语法笔记(VB)
1.获取图层字段 Dim pTable As ITable = pLayer Dim pField As IField pField = pTable.Fields.Field(i) Next 2. ...
- java实现阿里云短信服务发送验证码
由于做项目的时候遇到了接第三方短信服务,所以记录一下. 一.新建一个maven项目并导入相关依赖 <!--手机发送短信验证码--> <dependency> <group ...
- vscode中nodejs智能提示
简单粗暴,直接在项目中,运行npm install --save-dev @types/node命令,然后就ok了.
- lldb调试器知多少
lldb调试器简介 lldb 是一个有着 REPL 的特性和 C++ .Python 插件的开源调试器.lldb调试器的由来是伴随着Xcode的版本升级而来. Xcode4.3之前使用的默认调试器 ...
- 快速幂模板Super
//求x^nint ans=1;while(n){ if(n&1) ans=ans*x; x*=x; n>>=1;} 快速幂就是快速算底数的n次幂.其时间复杂度为 O(logN), ...
- Quartz定时任务整理
一. 介绍 Quartz是一个开源的定时任务调度框架,这里就不详细介绍了,我们直入主题Quartz主要由三部分组成 任务:JobDetail 触发器:Trigger,(分两类:SimpleTrigge ...
- 测试工具Fiddler(一)—— 基础知识
Fiddler基础知识 一.Fiddler是什么? Fiddler是一个http协议调试代理工具,它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据.设置断点. ...
- Activiti脚本任务(ScriptTask)
Activiti脚本任务(ScriptTask) 作者:Jesai 你一直问为什么到不了远方,请停下数数你的脚步,是不是还没迈开腿 对于没有接触过groovy脚本语言的人来说,可能比较难使用 应用场景 ...
- C++模板编程与宏编程经验谈
C++模板编程与宏编程经验谈 有人说C 与C++的不同主要是因为C++支持模板,不要说区别是面向对象化编程,因为C同样能很好的实现对象化编程,面向对象化其实只是思想,在很多语言中都能实现,区别在于实现 ...
- python中的dumps和loads区别
一.概念理解 json是一种轻量级的数据交换格式,对象由花括号括起来的逗号分割的成员构成,成员是字符串键和上文所述的值由逗号分割的键值对组成,如:{"name":"cct ...