我创建了一个简单的隐写术库,我正在尝试创建一个小的Qt 5.0.2应用程序来测试它。它由两个用于存储&的textEdits组成。显示路径名称,弹出文件对话框的两个按钮选择文件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();
}
是处理和存储两个文件的两个插槽
this是图书馆。
我感觉这与转换为QString并返回有关,但我不确定。
答案 0 :(得分:0)
基于对OP的讨论,我建议您将文件名保留为QString。替换char * bmpName;使用QString strBmpName;在你的标题中。然后将QString转换为以下行的char *。
BmpFile bm(MainWindow::bmpName);
到
QByteArray ba = strBmpName.toLocal8Bit();
BmpFile bm(ba.data());