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 的内容灵活,可根据需求 ...
随机推荐
- java架构之路(多线程)JMM和volatile关键字(二)
貌似两个多月没写博客,不知道年前这段时间都去忙了什么. 好久以前写过一次和volatile相关的博客,感觉没写的那么深入吧,这次我们继续说我们的volatile关键字. 复习: 先来简单的复习一遍以前 ...
- Vmware下Ubuntu 14.04静态IP地址的设置方法
一.环境 宿主机 Win 8.1 虚拟机工具 VMware 10.0 虚拟主机系统 Ubuntu 14.04 二.说明 这里需要注意的是:VMware对于VMnet8采用如下规则(192.168. ...
- Faster Rcnn随笔
步骤:1.build_head()函数: 构建CNN基层网络图像被缩放16倍2.build_rpn()函数: 在feature map上生成box的坐标和判断是否有物体 generate_anchor ...
- Pyhon语法字符集报错
pyhton对语法的字符集,特别的敏感因此我们在写python代码特别要注意.以下代码是个人在学习python中遇见的错误 附:错代码截图1-1 从以上代码中可以看到,似乎代码没有什么问题接下来验证一 ...
- http请求头中的content-type属性
在HTTP请求中,我们每天都在使用Content-Type来指定不同格式的请求信息,但是却很少有人去全面了解Content-Type中允许的值有多少,因此这里来了解一下Content-Type的可用值 ...
- QTP测试web时:打开ie浏览器进行录制但qtp录制脚本为空
1. 关闭ie的保护模式:设置——internet选项——安全——取消勾选“启用保护模式” 这一步很关键,之前试过很多步骤,只有这个成功了. 修改后如果可行即可.如果不行再进行下面操作: 2.关闭杀毒 ...
- 双指针,BFS与图论(一)
(一)双指针 1.日志统计 小明维护着一个程序员论坛.现在他收集了一份”点赞”日志,日志共有 N 行. 其中每一行的格式是: ts id 表示在 ts 时刻编号 id 的帖子收到一个”赞”. 现在小明 ...
- Shell 脚本学习总结
自己根据目前学到的东西制作了一张思维导图
- JS-04-流程控制和循环
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- ios--->使用@synchronized和dispatch_once实现单例
使用dispatch_once实现单例 单例实现的两种模式 @implementation XXClass //@synchronized来实现 + (id)sharedInstance { stat ...