| #include "mainwindow.h" |
| #include "ui_mainwindow.h" |
| |
| #include <QFileDialog> |
| #include <QDebug> |
| |
| MainWindow::MainWindow(QWidget *parent) |
| : QMainWindow(parent) |
| , ui(new Ui::MainWindow) |
| { |
| ui->setupUi(this); |
| |
| model = new QStandardItemModel(this); |
| model->setRowCount(10); |
| QStringList headerList; |
| headerList << "测深(m)" << "垂深(m)" << "方位(°)" << "总位移(m)" << "固井质量" << "测井取样"; |
| model->setHorizontalHeaderLabels(headerList); |
| selectModel = new QItemSelectionModel(model); |
| ui->tableView->setModel(model); |
| } |
| |
| MainWindow::~MainWindow() |
| { |
| delete ui; |
| } |
| |
| |
| void MainWindow::on_actOpen_triggered() |
| { |
| QString path = QCoreApplication::applicationDirPath(); |
| QString fileName = QFileDialog::getOpenFileName(this, "", path, "Qt 预定义编码(*.stm)"); |
| if (!fileName.isEmpty()) { |
| QFile file(fileName); |
| if (file.open(QIODevice::ReadOnly)) { |
| QDataStream stream(&file); |
| stream.setVersion(QDataStream::Qt_5_12); |
| qint16 rowCount, colCount; |
| stream >> rowCount; |
| stream >> colCount; |
| defaultTable(rowCount); |
| QString str; |
| for (int i = 0; i < colCount; i++) { |
| stream >> str; |
| } |
| |
| qint16 depth; |
| qreal meaDepth, direction, offSet; |
| QString quality; |
| bool sample; |
| QModelIndex index = model->index(0, 0); |
| QStandardItem *item = model->itemFromIndex(index); |
| for (int i = 0; i < rowCount; i++) { |
| stream >> depth; |
| index = model->index(i, 0); |
| item = model->itemFromIndex(index); |
| item->setData(depth, Qt::DisplayRole); |
| |
| stream >> meaDepth; |
| index = model->index(i, 1); |
| item = model->itemFromIndex(index); |
| item->setData(meaDepth, Qt::DisplayRole); |
| |
| stream >> direction; |
| index = model->index(i, 2); |
| item = model->itemFromIndex(index); |
| item->setData(depth, Qt::DisplayRole); |
| |
| stream >> offSet; |
| index = model->index(i, 3); |
| item = model->itemFromIndex(index); |
| item->setData(offSet, Qt::DisplayRole); |
| |
| stream >> quality; |
| index = model->index(i, 4); |
| item = model->itemFromIndex(index); |
| item->setData(quality, Qt::DisplayRole); |
| |
| stream >> sample; |
| index = model->index(i, 5); |
| item = model->itemFromIndex(index); |
| item->setCheckState(sample ? Qt::Checked : Qt::Unchecked); |
| } |
| file.close(); |
| } |
| } |
| } |
| |
| void MainWindow::on_actSave_triggered() |
| { |
| QString path = QCoreApplication::applicationDirPath(); |
| QString fileName = QFileDialog::getSaveFileName(this, "", path, "Qt 预定义编码(*.stm)"); |
| if (!fileName.isEmpty()) { |
| QFile file(fileName); |
| if (file.open(QIODevice::ReadWrite | QIODevice::Truncate)) { |
| QDataStream stream(&file); |
| stream.setVersion(QDataStream::Qt_5_12); |
| qint16 row = model->rowCount(); |
| stream << row; |
| qint16 col = model->columnCount(); |
| stream << col; |
| for (int i = 0; i < model->columnCount(); i++) { |
| stream << model->horizontalHeaderItem(i)->text(); |
| } |
| |
| for (int i = 0; i < model->rowCount(); i++) { |
| qint16 dep = model->item(i, 0)->data(Qt::DisplayRole).toInt(); |
| stream << dep; |
| qreal meaDep = model->item(i, 1)->data(Qt::DisplayRole).toFloat(); |
| stream << meaDep; |
| qreal direc = model->item(i, 2)->data(Qt::DisplayRole).toFloat(); |
| stream << direc; |
| qreal offset = model->item(i, 3)->data(Qt::DisplayRole).toFloat(); |
| stream << offset; |
| QString quality = model->item(i, 4)->data(Qt::DisplayRole).toString(); |
| stream << quality; |
| bool sample = model->item(i, 5)->checkState() == Qt::Checked; |
| stream << sample; |
| } |
| |
| file.close(); |
| } |
| } |
| } |
| |
| void MainWindow::on_actOpenBin_triggered() |
| { |
| QString path = QCoreApplication::applicationDirPath(); |
| QString fileName = QFileDialog::getOpenFileName(this, "", path, "标准编码(*.dat)"); |
| if (!fileName.isEmpty()) { |
| QFile file(fileName); |
| if (file.open(QIODevice::ReadOnly)) { |
| QDataStream stream(&file); |
| stream.setByteOrder(QDataStream::LittleEndian); |
| qint16 rowCount, colCount; |
| stream.readRawData((char *)&rowCount, sizeof(qint16)); |
| stream.readRawData((char *)&colCount, sizeof(qint16)); |
| defaultTable(rowCount); |
| |
| char *buffer; |
| uint length; |
| for (int i = 0; i < colCount; i++) { |
| stream.readBytes(buffer, length); |
| QString str = QString::fromLocal8Bit(buffer, length); |
| } |
| |
| |
| qint16 depth; |
| qreal meaDepth, direction, offSet; |
| QString quality; |
| qint8 sample; |
| QModelIndex index = model->index(0, 0); |
| QStandardItem *item = model->itemFromIndex(index); |
| for (int i = 0; i < rowCount; i++) { |
| stream.readRawData((char *)&depth, sizeof(qint16)); |
| index = model->index(i, 0); |
| item = model->itemFromIndex(index); |
| item->setData(depth, Qt::DisplayRole); |
| |
| stream.readRawData((char *)&meaDepth, sizeof(qreal)); |
| index = model->index(i, 1); |
| item = model->itemFromIndex(index); |
| item->setData(meaDepth, Qt::DisplayRole); |
| |
| stream.readRawData((char *)&direction, sizeof(qreal)); |
| index = model->index(i, 2); |
| item = model->itemFromIndex(index); |
| item->setData(direction, Qt::DisplayRole); |
| |
| stream.readRawData((char *)&offSet, sizeof(qreal)); |
| index = model->index(i, 3); |
| item = model->itemFromIndex(index); |
| item->setData(offSet, Qt::DisplayRole); |
| |
| stream.readBytes(buffer, length); |
| quality = QString::fromLocal8Bit(buffer, length); |
| index = model->index(i, 4); |
| item = model->itemFromIndex(index); |
| item->setData(quality, Qt::DisplayRole); |
| |
| stream.readRawData((char *)&sample, sizeof(qint8)); |
| index = model->index(i, 5); |
| item = model->itemFromIndex(index); |
| item->setCheckState(sample ? Qt::Checked : Qt::Unchecked); |
| } |
| file.close(); |
| } |
| } |
| } |
| |
| void MainWindow::on_actSaveBin_triggered() |
| { |
| QString path = QCoreApplication::applicationDirPath(); |
| QString fileName = QFileDialog::getSaveFileName(this, "", path, "Qt 预定义编码(*.dat)"); |
| if (!fileName.isEmpty()) { |
| QFile file(fileName); |
| if (file.open(QIODevice::ReadWrite | QIODevice::Truncate)) { |
| QDataStream stream(&file); |
| stream.setByteOrder(QDataStream::LittleEndian); |
| qint16 row = model->rowCount(); |
| qint16 col = model->columnCount(); |
| stream.writeRawData((char *)&row, sizeof(qint16)); |
| stream.writeRawData((char *)&col, sizeof(qint16)); |
| for (int i = 0; i < model->columnCount(); i++) { |
| QString str = model->horizontalHeaderItem(i)->text(); |
| QByteArray arr = str.toUtf8(); |
| stream.writeBytes(arr, arr.length()); |
| } |
| |
| for (int i = 0; i < model->rowCount(); i++) { |
| qint16 dep = model->item(i, 0)->data(Qt::DisplayRole).toInt(); |
| stream.writeRawData((char *)&dep, sizeof(qint16)); |
| qreal meaDep = model->item(i, 1)->data(Qt::DisplayRole).toFloat(); |
| stream.writeRawData((char *)&meaDep, sizeof(qreal)); |
| qreal direc = model->item(i, 2)->data(Qt::DisplayRole).toFloat(); |
| stream.writeRawData((char *)&direc, sizeof(qreal)); |
| qreal offset = model->item(i, 3)->data(Qt::DisplayRole).toFloat(); |
| stream.writeRawData((char *)&offset, sizeof(qreal)); |
| QString quality = model->item(i, 4)->data(Qt::DisplayRole).toString(); |
| stream.writeBytes(quality.toUtf8(), sizeof(quality.toUtf8().length())); |
| qint8 sample = model->item(i, 5)->checkState() == Qt::Checked ? 1 : 0; |
| stream.writeRawData((char *)&sample, sizeof(qint8)); |
| } |
| |
| file.close(); |
| } |
| } |
| } |
| |
| void MainWindow::on_actTabReset_triggered() |
| { |
| defaultTable(8); |
| } |
| |
| void MainWindow::defaultTable(int rowNumber) |
| { |
| model->removeRows(0, model->rowCount()); |
| model->setRowCount(rowNumber); |
| for (int i = 0; i < rowNumber; i++) { |
| QModelIndex index = model->index(i, model->columnCount() - 1); |
| QStandardItem *item = model->itemFromIndex(index); |
| item->setCheckable(true); |
| item->setEditable(false); |
| item->setText(model->headerData(model->columnCount() - 1, Qt::Horizontal).toString()); |
| } |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2021-03-16 C# 自定义时间进度条