在上述代码中,m[1]为空是因为在获取查询结果时,使用了错误的索引。在while循环中的代码中,row[0]表示查询结果的第一列,而row[1]表示查询结果的第二列。

因此,正确的代码应该是将m[1]替换为m[0],如下所示:

QString text = QString::fromStdString(m[0]);

另外,还需要将获取查询结果的代码放在while循环的外部,以便在循环结束后进行相应的操作。修改后的代码如下所示:

QString Qid = ui.lineEdit->text();
id = Qid.toStdString();

if (id.empty())
{
    QString text = QStringLiteral("输入编号为空!");
    emit sendtext(text); //传出子窗体信号
    newW->show();
}
else
{
    //查询数据
    char value[100];
    sprintf(value, "SELECT * FROM measurement WHERE id = %d", atoi(id.c_str()));
    //const char* value = "select * from measurement where id = '22050534'";
    if (mysql_query(&m, value))
    {
        printf("未查到记录:%s \n", mysql_error(&m));
        QString text = QStringLiteral("未查到记录!");
        emit sendtext(text); //传出子窗体信号
        newW->show();
    }
    else
    {
        printf("查询成功 \n");
        //获取查询结果
        res = mysql_store_result(&m);
        if (res)
        {
            printf("获取到数据\n");
            //设置表格行数列数
            ui.tableWidget->setRowCount(11);
            ui.tableWidget->setColumnCount(3);
            //设置表格中每一行的表头
            QString tablehead1 = QStringLiteral("实测值"), tablehead2 = QStringLiteral("理想值"), tablehead3 = QStringLiteral("误差");
            ui.tableWidget->setHorizontalHeaderLabels(QStringList() << tablehead1 << tablehead2 << tablehead3);
            //设置表格数据区内的所有单元格都不允许编辑
            ui.tableWidget->setEditTriggers(QAbstractItemView::DoubleClicked);
            //设置指定行的宽度
            ui.tableWidget->setColumnWidth(0, 260);
            ui.tableWidget->setColumnWidth(1, 260);
            ui.tableWidget->setColumnWidth(2, 260);
            //打印获取到的数据
            printf("  id \t\t v0\t v1\t v2\t v3\t v4\t v5\t v6\t v7\t v8\t v9\t v10\n");
            while (row = mysql_fetch_row(res))
            {
                float k = (stof(row[11]) - stof(row[1])) / 10;
                printf("%s\t", row[0]);
                string m[11];
                for (int i = 0; i < 11; i++)
                {
                    printf("%s\t", row[i + 1]);
                    m[i] = row[i + 1];
                    //v[i] = stof(row[i + 1]);
                    //s[i] = stof(row[1]) + i * k;
                    //vs[i] = stof(row[i + 1]) - stof(row[1]) - i * k;
                    i++;
                }
                printf("\n");
                /**/
                //QString text = QString::fromStdString(to_string(v[1]));
                QString text = QString::fromStdString(m[0]);
                emit sendtext(text); //传出子窗体信号
                newW->show();

                //设置表格中每一行的内容
                for (int i = 0; i < 11; i++)
                {
                    ui.tableWidget->setItem(i, 0, new QTableWidgetItem(QString::fromStdString(row[i + 1])));
                }
                for (int i = 0; i < 11; i++)
                {
                    ui.tableWidget->setItem(i, 1, new QTableWidgetItem(QString::number(stof(row[1]) + i * k)));
                }
                for (int i = 0; i < 11; i++)
                {
                    ui.tableWidget->setItem(i, 2, new QTableWidgetItem(QString::number(stof(row[i + 1]) - stof(row[1]) - i * k)));
                }
            }
        }
        else
        {
            printf("未获取到数据:%s \n", mysql_error(&m));
            QString text = QStringLiteral("未获取到数据!");
            emit sendtext(text); //传出子窗体信号
            newW->show();
        }
    }
    //释放资源
    mysql_free_result(res);//释放结果集
    //mysql_close(&m);//关闭数据库
}

请注意,这只是修复了m[1]为空的问题,并对代码进行了一些调整。如果仍然存在其他问题,可能需要进一步检查代码和调试

QString Qid = uilineEdit-text;	id = QidtoStdString;	if idempty			QString text = QStringLiteral输入编号为空!;		emit sendtexttext; 传出子窗体信号		newW-show;		else			查询数据		char value100;		sprintfvalue SELECT FROM m

原文地址: https://www.cveoy.top/t/topic/iq0P 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录