用C++ QT实现点击下拉框,选则后自动填写其他项

文章详细介绍了在Qt中使用QFile和QTextStream从CSV文件,以及通过QAxObject从Excel文件读取数据,并将这些数据填充到ComboBox下拉框中的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 . 读取选项内容

1.1 从csv文件读取

#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();
}

从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);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

grant_wtt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值