Qt实例:利用QTableWidge编辑txt文档,响应鼠标点击事件;利用Qlabel控件显示图片

(QT5.6.1+win10)
主要功能:

  1. 利用QTableWidge表格实现txt文档的写与读:
    写数据:点击写数据按钮,实现数据显示于TableWidge表格且存于txt文档;
    读数据:点击读数据按钮,将txt文档的数据全部显示于TableWidge表格控件。
  2. 鼠标双击某行,按钮控件会响应(显示第一列对应的文本);
  3. 鼠标双击某行,label控件会响应,显示对应图片(图片名与时间名一致)。

基于QT控件的实现:
在这里插入图片描述
效果图:
在这里插入图片描述

  1. 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
  1. 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);
       }


}

部分说明:
3.
在这里插入图片描述

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值