注意:這只是一個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
1 #ifndef MYMAINWINDOW_H 2 #define MYMAINWINDOW_H 3 4 #include <QMainWindow> 5 #include <QComboBox> 6 #include <QSpinBox> 7 #include <QDateEdit> 8 #include <QDate> 9 #include<QDebug> 10 #include<QLineEdit> 11 namespace Ui { 12 class MyMainWindow; 13 } 14 15 class MyMainWindow : public QMainWindow 16 { 17 Q_OBJECT 18 19 public: 20 explicit MyMainWindow(QWidget *parent = 0); 21 ~MyMainWindow(); 22 23 private slots: 24 void on_pushButton_add_clicked(); 25 26 void on_pushButton_save_clicked(); 27 28 void on_pushButton_add2_clicked(); 29 30 void on_pushButton_save2_clicked(); 31 32 private: 33 Ui::MyMainWindow *ui; 34 void setplainWidget(int rowIndex, int colIndex); 35 void setDateWidget(int rowIndex, int colIndex); 36 void setComboxWidget(int rowIndex, int colIndex, QStringList& lstStr); 37 void setSpinBox(int rowIndex, int colIndex); 38 }; 39 40 #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(0); 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(0); 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(0); spinbox->setMaximum(999999999); spinbox->setSingleStep(1); hLayout = new QHBoxLayout(); widget = new QWidget(ui->taskTableWidget); hLayout->addWidget(spinbox); hLayout->setMargin(0); 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);//總行數增加1 //資料開始時間 setDateWidget(rowIndex, 0); //資料結束時間 setDateWidget(rowIndex, 1); QStringList lstStrYears; for (int i = 0; i <= 15; i++) { QDateTime curDateTime = QDateTime::currentDateTime(); int curYear = curDateTime.date().year(); lstStrYears.push_back(QString::number(curYear + i)); } lstStrYears.push_front(""); setComboxWidget(rowIndex, 2, lstStrYears); //涉外情況 QStringList lstStrForegion; lstStrForegion.push_back(QString::fromLocal8Bit("")); lstStrForegion.push_back(QString::fromLocal8Bit("有")); lstStrForegion.push_back(QString::fromLocal8Bit("無")); setComboxWidget(rowIndex, 3, lstStrForegion); //合同 setComboxWidget(rowIndex,4, 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=0;i<row;++i) { for(int j=0;j<column;++j) { //第一個日期類型 QWidget *widget=ui->taskTableWidget->cellWidget(i,j); // qDebug()<<widget->children().at(1); if ((widget->children().at(1))->inherits("QDateEdit")) { QDateEdit *dataedit=(QDateEdit*)(widget->children().at(1)); msg=msg.append(dataedit->date().toString("yyyy-MM-dd"))+" "; } //第二個QComboBox類型 else if((widget->children().at(1))->inherits("QComboBox")) { QComboBox *combox=(QComboBox*)(widget->children().at(1)); msg=msg.append(combox->currentText())+" "; } } } qDebug()<<msg<<"\n"; } void MyMainWindow::on_pushButton_add2_clicked() { int rowIndex = ui->taskTableWidget2->rowCount(); ui->taskTableWidget2->setRowCount(rowIndex + 1);//總行數增加1 setplainWidget(rowIndex,0); setplainWidget(rowIndex,1); setplainWidget(rowIndex,2); setplainWidget(rowIndex,3); setplainWidget(rowIndex,4); //使行列頭自適應寬度,最后一列將會填充空白部分 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 = 0; i<row; i++) { for (int j = 0; 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; }
如有疑惑可進行溝通指教。