在抛出"char const*"实例后终止调用

Terminate called after throwing an instance of 'char const*'

本文关键字:实例 终止 调用 const char      更新时间:2023-10-16

我创建了一个简单的隐写库,我正在尝试创建一个小的Qt 5.0.2应用程序来测试它。它由两个textit组成,用于存储&显示路径名,以及弹出文件对话框选择文件TXT和bmp的两个按钮,以允许前者"嵌入"到后者中。

但是当我点击"生成"按钮时,它抛出"抛出'char const*'实例后调用终止"。

void MainWindow::on_generate_clicked()
{
    BmpFile bm(MainWindow::bmpName);
    char *outputFile = "test1.bmp";
    if( bm.hide(MainWindow::bmpName, MainWindow::txtName, outputFile) == 0 )
    {
        printf("Hidding done.n");
    }
    else
    {
        printf("Error!");
    }
}

是抛出错误的Qt槽。

void MainWindow::on_selFile_clicked()
{
    QString txtname(MainWindow::txtName);
    txtname = QFileDialog::getOpenFileName(this, tr("Open file"),"",tr("Files (*.txt)"));
    ui->fileBox->setText(txtname);
    QByteArray ba = txtname.toLocal8Bit();
    MainWindow::txtName = ba.data();
}
void MainWindow::on_selBitmap_clicked()
{
    QString bmpname=(MainWindow::bmpName);
    bmpname = QFileDialog::getOpenFileName(this, tr("Open file"),"",tr("Files (*.bmp)"));
    ui->bmpBox->setText(bmpname);
    QByteArray ba = bmpname.toLocal8Bit();
    MainWindow::bmpName = ba.data();
}

是处理和存储两个文件的两个槽

这是图书馆

我有一种感觉,它与转换为QString和返回有关,但我不确定。

根据OP上的讨论,我建议您将文件名保留为QString。替换char* bmpName;与QString strBmpName;在你的头部。然后将下面一行的QString转换为char*。

BmpFile bm(MainWindow::bmpName);

QByteArray ba = strBmpName.toLocal8Bit();
BmpFile bm(ba.data());
相关文章: