该篇文章主要继上篇文章的延续:
上篇文章链接
主要功能:
鼠标点击日历后,可响应QTableWidge控件,显示对应的(以年月日命名的txt文档)数据于QTableWidge表格控件中。
基于QT控件的实现:
效果图:
- h文件:
private slots:
void showTimeSlot();
void setDataSlot();
- cpp文件:
构造函数:
/*****lineEdit响应日历控件**********/
ui->calendarlabel->setText("选择日期: ");
connect(ui->calendarlineEdit,SIGNAL(cursorPositionChanged(int,int)),this,SLOT(showTimeSlot()));
//隐藏垂直头
ui->calendarWidget->setVerticalHeaderFormat(QCalendarWidget::NoVerticalHeader);
//隐藏时间控件
ui->calendarWidget->setHidden(true);
//时间控件点击事件
connect(ui->calendarWidget,SIGNAL(clicked(QDate)),this,SLOT(setDataSlot()));
槽函数:
void MainWindow::showTimeSlot()
{
ui->calendarWidget->setHidden(false);
}
/*****tableWidget响应日历控件(文件名与文件夹名相同,均为鼠标单击选择的日历日期(年月日))**********/
void MainWindow::setDataSlot()
{
//接收选择时间
QDate date = ui->calendarWidget->selectedDate();
//时间格式化
QString str = date.toString("yyyy.MM.dd");//文件名
QString dir_str2 = date.toString("yyyy.MM.dd");//文件夹名
//赋值
ui->calendarlineEdit->setText(str);
//日期控件隐藏
// calendarWidget->setHidden(true);
QString fileName = dir_str2 +"/"+ str + ".txt";
// QFile file(fileName);
if(!fileName.isEmpty())
{
QFile file;
file.setFileName(fileName);
//打开文件
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
QMessageBox msg;
msg.setText("打开文件失败!");
msg.exec();
}
else
{
QStringList textList; //记录文件中每一行的数据
// textList = {"序号", "登录名", "姓名"}; //向添加表头添加内容
// ui->tableWidget->setHorizontalHeaderLabels(textList);
QTextStream in(&file);
if(!file.size())
{
QMessageBox::warning(0,tr("警告"),tr("文件大小为空!"),QMessageBox::Ok);
}
else
{
//将文件数据导入表格
int r_count = 0; //统计文件的行数
while (!in.atEnd())
{
QString line = in.readLine();
textList.append(line); //保存文件的数据
r_count++; //记录文件的行数 前两行为表头
}
qDebug() << "r_count: "<< r_count;
file.close(); //关闭文件
if(!textList.isEmpty())
{
QStringList listColHeader = textList.at(1).split("\t");
QStringList listRowHeader = textList.at(0).split("\t");
int c_count = listRowHeader.count();
qDebug() << "c_count: "<< c_count;
ui->tableWidget->clear();
ui->tableWidget->setRowCount(r_count); //前两行是行列表头
ui->tableWidget->setColumnCount(c_count-1); //最后一行是“\t"
// ui->tableWidget->setHorizontalHeaderLabels(listRowHeader);
// ui->tableWidget->setVerticalHeaderLabels(listColHeader);
ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"时间"<<"操作人"<<"T值"<<"图片"); //向添加表头添加内容
qDebug()<<"start importTable row count:::"<<r_count<<"col count:::"<<c_count;
for(int row = 0; row < r_count; row++)
{
qDebug() << "row: "<< row;
QStringList tmpList;
tmpList = textList.at(row).split("\t");
for(int col = 0; col < c_count; col++)
{
qDebug() << "tmpList.at(col): "<< tmpList.at(col) <<"col: "<< col;
QTableWidgetItem *item = new QTableWidgetItem(tmpList.at(col));
ui->tableWidget->setItem(row, col, item);
}
}
QMessageBox::information(0,tr("提示"),tr("导入成功!"));
}
}
}
}
else
{
QMessageBox::warning(0,tr("警告"),tr("文件名未指定!"),QMessageBox::Ok);
}
}
部分说明: