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项目之家庭收支记账软件
模拟实现基于文本界面的家庭记账软件,该软件能够记录家庭的收入支出,并能够打印收支明细表. 项目采用分级菜单方式.主菜单如下: 假设家庭起始的生活基本金为10000元. 每次登记收入(菜单2)后,收入的 ...
- vscode中nodejs智能提示
简单粗暴,直接在项目中,运行npm install --save-dev @types/node命令,然后就ok了.
- MapGIS文件如何压缩存盘
经过多次编辑修改的MapGIS数据,含有大量逻辑上已删除的节点或图元,数据冗余复杂, 在转换过程前应注意一定要采用压缩存盘方式处理,目的是确保编辑状态已删除的数据真正从物理存储层删除,以确保数据的精简 ...
- [Micropython]TPYBoard v202 智能WIFI远控小车
转载请注明文章来源,更多教程可自助参考docs.tpyboard.com,QQ技术交流群:157816561,公众号:MicroPython玩家汇 前言---------------------- 之 ...
- 田忌赛马 - dp
Here is a famous story in Chinese history. That was about 2300 years ago. General Tian Ji was a high ...
- 洛谷 UVA1395 苗条的生成树 Slim Span
题目链接 题目描述 求所有生成树中最大边权与最小边权差最小的,输出它们的差值. 题目分析 要求所有生成树中边权极差最小值,起初令人无从下手.但既然要求所有生成树中边权极差最小值,我们自然需要对每一棵生 ...
- vue需要知道哪些才能算作入门以及熟练
前两天接到一个面试官问我vue什么程度才算作可以用于开发,以前从没遇到过类似问题.只能大致说了一些,事后觉得也应该总结一下,前端vue这么火热那究竟什么才算做入门什么才算做熟练,只是我个人观点,不代表 ...
- 动画 | 什么是平衡二分搜索树(AVL)?
二分搜索树又名有序二叉查找树,它有一个特点是左子树的节点值要小于父节点值,右子树的节点值要大于父节点值.基于这样的特点,我们在查找某个节点的时候,可以采取二分查找的思想快速找到这个节点,时间复杂度期望 ...
- Element中(Notification)通知组件字体修改(Vue项目中Element的Notification修改字体)
这个问题纠结很久,一样的写的为啥有的页面就可以,有的就不行: 后来才发现: 先说一下怎么设置: 先定义customClass一个属性,用来写class属性值: 之后还需要修改一下组件里style标签的 ...
- 【Oracle】复制表结构和表数据
1.既复制表结构也复制表数据:CREATE TABLE tab_new AS SELECT * FROM tab_old; 2.只复制表结构:CREATE TABLE tab_new AS SELEC ...