(QT5.6.1+win10)
主要功能:
- 利用QTableWidge表格实现txt文档的写与读:
写数据:点击写数据按钮,实现数据显示于TableWidge表格且存于txt文档;
读数据:点击读数据按钮,将txt文档的数据全部显示于TableWidge表格控件。 - 鼠标双击某行,按钮控件会响应(显示第一列对应的文本);
- 鼠标双击某行,label控件会响应,显示对应图片(图片名与时间名一致)。
基于QT控件的实现:
效果图:
- h文件:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
QString dateTime ;
QString op;
QString dateTimefile;
QString dir_str;
QString fileName;
QString dateTimePic;
QString Pic;
int m_nCapTimes;
private slots:
void on_pb_write_clicked();
void on_pb_read_clicked();
void testSlot(int row,int column);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
- cpp文件:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include <QDateTime>
#include <QDebug>
#include <QDir>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
m_nCapTimes = 0;
QDateTime timefile = QDateTime::currentDateTime();
dateTimefile = timefile.toString("yyyy.MM.dd");//文件夹名(年月日)
QFileInfo l_info("./Tbwidget0312.exe");
QString l_str = l_info.absolutePath();//绝对路径:D:\QT\QT5.6.1\Projects\Tbwidget0312\build-file0305-Desktop_Qt_5_6_1_MinGW_32bit-Debug
dir_str= l_str+"/"+dateTimefile;
QDir dir;
if (!dir.exists(dir_str))
{
bool res = dir.mkpath(dir_str);
qDebug() << "新建目录是否成功" << res;
}
else
{
qDebug() <<"目录存在" ;
}
/*****tableWidget响应鼠标点击**********/
ui->tableWidget->setSelectionBehavior ( QAbstractItemView::SelectRows); //设置选择行为,以行为单位
ui->tableWidget->setSelectionMode ( QAbstractItemView::SingleSelection); //设置选择模式,选择单行
ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
connect(ui->tableWidget,SIGNAL(cellDoubleClicked(int,int)),this,SLOT(testSlot(int,int)));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::testSlot(int row,int column)
{
QTableWidgetItem * item1 = new QTableWidgetItem;
item1 = ui->tableWidget->item(row,0);//鼠标响应第一列
ui->pushButton->setText(item1->text());
/*****点击某行响应第一列,并打开与其命名一致的图片**********/
QString pbtext = item1->text(); //获取鼠标点击表格对应的内容
qDebug() <<"pbtext: " <<pbtext;
QString PicName = dir_str +"/"+ pbtext + ".tif";//图片名为pbtext(年月日)的图片文档
if(PicName.isEmpty())
{
return;
}
else
{
QImage* img=new QImage;
if(! ( img->load(PicName) ) ) //加载图像
{
QMessageBox::information(this,
tr("打开图像失败"),
tr("打开图像失败!"));
delete img;
return;
}
// ui->label->setPixmap(QPixmap::fromImage(*img));
/*****图片大小自适应控件**********/
QPixmap pixmap = QPixmap::fromImage(*img);
int with = ui->label->width();
int height = ui->label->height();
QPixmap fitpixmap = pixmap.scaled(with, height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); // 饱满填充
//QPixmap fitpixmap = pixmap.scaled(with, height, Qt::KeepAspectRatio, Qt::SmoothTransformation); // 按比例缩放
ui->label->setPixmap(fitpixmap);
}
}
/********点击按钮(写数据)向tablewidget表格写数据,同时将数据存入txt文档***********/
void MainWindow::on_pb_write_clicked()
{
op = ui->le_operator->text();
int row = ui->tableWidget->rowCount(); //获取表格行数
ui->tableWidget->setRowCount(row+1);//总行数增加1
m_nCapTimes++;
qDebug()<< m_nCapTimes<<endl;
/*****时间(时分秒)**********/
QDateTime time = QDateTime::currentDateTime();
dateTime = time.toString("HH.mm.ss");//时分秒
QTableWidgetItem *item_dateTime = new QTableWidgetItem(dateTime);
item_dateTime->setBackgroundColor(QColor(238,238,0));
item_dateTime->setTextColor(QColor(0,0,205));
ui->tableWidget->setItem(m_nCapTimes-1,0,item_dateTime);//向tablewidget表格添加时间
/*****可输入的操作人**********/
QTableWidgetItem *item_op = new QTableWidgetItem(op);
item_op->setBackgroundColor(QColor(238,238,0));
item_op->setTextColor(QColor(0,0,205));
ui->tableWidget->setItem(m_nCapTimes-1,1,item_op);//向tablewidget表格添加操作人
/*****T值,这里为m_nCapTimes**********/
QString qAvgGray_T1;
qAvgGray_T1 = QString("%1").arg(m_nCapTimes);
QTableWidgetItem *item_m = new QTableWidgetItem(qAvgGray_T1);
item_m->setBackgroundColor(QColor(238,238,0));
item_m->setTextColor(QColor(0,0,205));
ui->tableWidget->setItem(m_nCapTimes-1,2,item_m);
/*****查看图片**********/
Pic="查看图片";
QTableWidgetItem *item_Pic = new QTableWidgetItem(Pic);
item_Pic->setBackgroundColor(QColor(238,238,0));
item_Pic->setTextColor(QColor(0,0,205));
ui->tableWidget->setItem(m_nCapTimes-1,3,item_Pic);
QString fileName = dir_str +"/"+ dateTimefile + ".txt";//文件名为年月日的txt文档
QFile file(fileName);
QTextStream out(&file);//向文档写tablewidget表格里的内容
if (file.open(QIODevice::WriteOnly | QIODevice::Text|QIODevice::Append) )
{
QString text_Time =ui->tableWidget->item(m_nCapTimes-1,0)->text();
QString text_op =ui->tableWidget->item(m_nCapTimes-1,1)->text();
QString text_T1 =ui->tableWidget->item(m_nCapTimes-1,2)->text();
QString text_Pic =ui->tableWidget->item(m_nCapTimes-1,3)->text();
out << text_Time<< "\t"<<text_op<< "\t"<<text_T1<< "\t" <<text_Pic<< "\t"<< "\n";
qDebug() << text_Time;
qDebug() << text_op;
qDebug() << text_T1;
file.close();
}
}
void MainWindow::on_pb_read_clicked()
{
// ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"城市"<<"总云量"<<"降水量");//向添加表头添加内容
QString fileName = dir_str +"/"+ dateTimefile + ".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);
}
}
部分说明: