【问题标题】:Qt QDesktopServices::openUrl() error 2Qt QDesktopServices::openUrl() 错误 2
【发布时间】:2013-08-12 21:00:59
【问题描述】:

我在使用 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 进行了尝试,但结果相同。

【问题讨论】:

  • 顺便说一句... Qt。不是QT。 Qt 是一个跨平台的应用程序开发框架,而 QT (QuickTime) - 是苹果公司开发的一个可扩展的多媒体框架。
  • 好的...抱歉打扰了标题。固定。

标签: qt service desktop shellexecute openurl


【解决方案1】:

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

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

【讨论】:

  • 我试图通过 QString addr,但它没有工作。所以我尝试将其转换为 char *
  • 你能说说为什么它不起作用吗?编译错误?链接错误?运行时错误? QUrl 接受一个 QString。我看不出使用 addr 而不是 *addrW 会失败。
  • 我终于发现了我之前犯的错误。在我读取带有地址的 .txt 文件时,这只是一个愚蠢的错误,所以我还读取了 '\n' 字符。我使用 QTextStream::readline() 修复了它。不过还是谢谢你的回答。我只是初学者,所以有时我什至会想念这些东西。
【解决方案2】:

QUrl 有一个fromLocalFile() 函数:

QDesktopServices::openUrl(QUrl::fromLocalFile(act->data().toString()));

【讨论】:

    猜你喜欢
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多