Use C++ QT to implement click drop-down box and automatically fill in other items after selecting

1. Read option content

1.1 Reading from csv file

#include <QApplication>
#include <QFile>
#include <QTextStream>
#include <QVector>
#include <QStringList>
#include <QDebug>

int main(int argc, char *argv[])
{
    
    
    QApplication app(argc, argv);

    // 打开CSV文件
    QFile file("your_csv_file.csv");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
    
    
        qDebug() << "无法打开CSV文件";
        return 1;
    }

    // 创建一个QVector来存储CSV数据
    QVector<QStringList> csvData;

    // 读取并解析CSV文件
    QTextStream in(&file);
    while (!in.atEnd())
    {
    
    
        QString line = in.readLine();
        QStringList fields = line.split(",");

        // 将CSV行数据添加到QVector
        csvData.append(fields);
    }

    // 输出CSV数据
    for (const QStringList &row : csvData)
    {
    
    
        qDebug() << row.join(", ");
    }

    // 关闭文件
    file.close();

    return app.exec();
}

read from excel

#include <QApplication>
#include <QWidget>
#include <QTableWidget>
#include <QAxObject>

int main(int argc, char *argv[])
{
    
    
    QApplication app(argc, argv);

    // 创建一个Qt应用程序
    QWidget window;
    window.setWindowTitle("读取Excel文件");

    // 创建一个QTableWidget来显示Excel数据
    QTableWidget *tableWidget = new QTableWidget(&window);

    // 创建QAxObject以连接到Excel应用程序
    QAxObject excel("Excel.Application", &window);
    excel.setProperty("Visible", false); // 使Excel不可见

    // 打开Excel工作簿
    QAxObject *workbooks = excel.querySubObject("Workbooks");
    QAxObject *workbook = workbooks->querySubObject("Open(const QString&)", "your_excel_file.xlsx");

    if (workbook)
    {
    
    
        // 获取第一个工作表
        QAxObject *worksheets = workbook->querySubObject("Worksheets");
        QAxObject *worksheet = worksheets->querySubObject("Item(int)", 1);

        if (worksheet)
        {
    
    
            // 获取行数和列数
            int rowCount = worksheet->property("UsedRange").querySubObject("Rows")->property("Count").toInt();
            int columnCount = worksheet->property("UsedRange").querySubObject("Columns")->property("Count").toInt();

            // 设置表格的行数和列数
            tableWidget->setRowCount(rowCount);
            tableWidget->setColumnCount(columnCount);

            // 读取Excel数据并填写到表格中
            for (int row = 1; row <= rowCount; ++row)
            {
    
    
                for (int col = 1; col <= columnCount; ++col)
                {
    
    
                    QAxObject *cell = worksheet->querySubObject("Cells(int, int)", row, col);
                    QString cellData = cell->dynamicCall("Value()").toString();
                    QTableWidgetItem *item = new QTableWidgetItem(cellData);
                    tableWidget->setItem(row - 1, col - 1, item);
                }
            }

            // 释放工作表对象
            worksheet->dynamicCall("Release()");
        }

        // 释放工作簿对象
        workbook->dynamicCall("Close()");
        workbook->dynamicCall("Release()");
    }

    // 退出Excel应用程序
    excel.dynamicCall("Quit()");

    // 显示表格
    tableWidget->show();

    return app.exec();
}

auto cbox = new ComboBox();
    cbox->setEditable(true);
    m_pTableView->setIndexWidget(m_pModel->index(idx, 0), cbox);
    // 获取文件中的数据
    QFile file("D:/develop/Projects/QTPro/TMI/tmi/MaterialInfo.csv");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
    
    
        qDebug() << "无法打开CSV文件" << endl;
        return;
    }

//     创建一个QVector来存储CSV数据
//        QVector<QStringList> csvData;

    // 读取并解析CSV文件
    QTextStream in(&file);
    cbox->clear();
    while (!in.atEnd()) {
    
    
        QString line = in.readLine();
        QStringList fields = line.split(",");
        cbox->addItem(fields[0]);
        // 将CSV行数据添加到QVector
        //        csvData.append(fields);
    }

Guess you like

Origin blog.csdn.net/qq_42817360/article/details/133982166