3

我在使用 QDesktopServices::openUrl() 函数打开文件时遇到问题。

我有一个生成文件绝对地址的代码,但是当我尝试运行它时,我得到了 shellExecute 错误 2。

这是我正在使用的代码:

void openFileMainWindow::runSong() {
QAction *act = qobject_cast<QAction *>(sender());

QString addr = "file:///";
addr.append(QString(act->data().toString()));

QByteArray tempArray  = addr.toUtf8();
const char * addrW    = tempArray.data();

QMessageBox::warning(this, tr("Info"), tr("You are trying to open file:\n%1").arg(addrW), QMessageBox::Ok);

QDesktopServices::openUrl(QUrl(addrW, QUrl::TolerantMode)); 

}

当我尝试手动将路径写入“file:///.../file.mp3”时,它运行良好,但为什么生成的地址不是?我也仅使用 QString addr 进行了尝试,但结果相同。

4

2 回答 2

0

肯定是编码问题。QUrl 将 QString 作为第一个参数。不知道在将初始 QString addr 压缩到 QByteArray 后,然后获取 const char * 地址并最终让 QUrl 将其转换回 QString 后,还剩下什么。

为什么您不只是将您的地址传递给 QUrl,有什么特别的原因吗?没有 tempArray?地址?

于 2013-08-12T21:10:36.903 回答
0

QUrl 有一个fromLocalFile()功能:

QDesktopServices::openUrl(QUrl::fromLocalFile(act->data().toString()));
于 2021-04-26T15:06:22.660 回答