注意:这只是一个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中添加列表并输出的更多相关文章

  1. 在QTableWidget中添加QCheckBox并使其居中显示(转)

    实现思路:把QCheckBox嵌入式到一个水平布局中 QWidget *widget;   QHBoxLayout *hLayout;   QCheckBox *ckb;   ...   ckb =  ...

  2. QTableWidget中添加按钮

    添加按钮 void QTableWidget::setCellWidget ( int row, int column, QWidget * widget ) widget可以是自己定义的按钮 cla ...

  3. Ext 向Ext.form.ComboBox()中添加列表的分类

    1.静态 [javascript] view plaincopy var staticComboBox = new Ext.form.ComboBox({   fieldLabel:'回访结果',   ...

  4. 点击得到QTableWidget中任意位置QPushButton的行列信息

    http://www.qtcn.org/bbs/read-htm-tid-51835.html http://www.qtcn.org/bbs/simple/?t43841.html 比如(点击每行最 ...

  5. Python之向日志输出中添加上下文信息

    除了传递给日志记录函数的参数(如msg)外,有时候我们还想在日志输出中包含一些额外的上下文信息.比如,在一个网络应用中,可能希望在日志中记录客户端的特定信息,如:远程客户端的IP地址和用户名.这里我们 ...

  6. 向redis中添加删除list列表

    转: 向redis中添加删除list列表 2018年04月18日 15:44:54 luo_yu_1106 阅读数:4082   一.添加 向redis中添加队列有两种方式 1.lpush l是lef ...

  7. 【转】Python之向日志输出中添加上下文信息

    [转]Python之向日志输出中添加上下文信息 除了传递给日志记录函数的参数(如msg)外,有时候我们还想在日志输出中包含一些额外的上下文信息.比如,在一个网络应用中,可能希望在日志中记录客户端的特定 ...

  8. 在 Wiki 标记中添加无序列表

    项目:在 Wiki 标记中添加无序列表在编辑一篇维基百科的文章时,你可以创建一个无序列表,即让每个列表项占据一行,并在前面放置一个星号.但是假设你有一个非常大的列表,希望添加前面的星号.你可以在每一行 ...

  9. 127使用 TableView 自带的单元格样式实现好友列表,另外在单元格中添加辅助按钮

    类似的做法如之前这篇随笔:114自定义UITableViewCell(扩展知识:为UITableViewCell添加动画效果) 相比之下:自定义 UITableViewCell 的内容灵活,可根据需求 ...

随机推荐

  1. UGUI源码之Selectable

    Selectable是Button.InputField.Toggle.ScrollBar.Slider.Dropdown的基类. Selectable的继承的类与接口如下: public class ...

  2. 随机算法 - Miller_Rabin pollard_rho

    #include<stdio.h> #include<string.h> #include<stdlib.h> #include<time.h> #in ...

  3. Excel导入数据库百万级数据瞬间插入

    Excel导入数据库百万级数据瞬间插入 百万级别,瞬间,有点吊哇

  4. 元素定位工具Weditor的使用

    (1).安装:pip install --pre --upgrade weditor 安装成功 (2).启动python -m weditor

  5. OpenGL ES for Android 环境搭建

    在Android上运行OpenGL ES程序需要用到GLSurfaceView控件,GLSurfaceView继承自SurfaceView并实现了GLThread,通过OpenGL ES进行绘制. O ...

  6. jqGrid以setGridParam方式postData,包含历史数据的问题

    系统在使用jqGrid时,如果某些页面的查询项是复选框,后台是数组接收的,就会出现传值不正确问题. 1.项目中某查询页面存在的复选框:待处理S1,正在处理S2,已处理S3: 使用jqGrid提交查询数 ...

  7. crawler 听课笔记 碎碎念 3 关于python的细枝末节的回顾复习

    和廖雪峰大神的教程学了几遍后,还是出现了许多不足,于是就做一些回顾,列出一些python的细节问题,有一些就提一下,如果发现不清楚的话 还请移步https://www.liaoxuefeng.com/ ...

  8. Java.前端模板.Thymleaf

    1. Input 日期格式化 <input id="renewalDate" name="renewalDate" th:value="${#d ...

  9. 「 从0到1学习微服务SpringCloud 」09 补充篇-maven父子模块项目

    系列文章(更新ing): 「 从0到1学习微服务SpringCloud 」06 统一配置中心Spring Cloud Config 「 从0到1学习微服务SpringCloud 」07 RabbitM ...

  10. 事件总线 EventBus

    661. .net中事件模型很优雅的实现了观察者模式,同时被大量的使用在各种框架中. [2016-04-30 10:52:42]662. Prism框架中实现了一个典型的EventAggregator ...