QDesktopServices openUrl无法打开

时间:2016-01-02 07:36:02

标签: c++ qt

我正在尝试使用QDesktopServices打开定义为cpath的目录。

QString openPath = QDir::toNativeSeparators(cpath);
QDesktopServices::openUrl(QUrl(cpath, QUrl::TolerantMode));

但是上面的代码没有做任何事情。

代码放在一个函数中,该函数使用connect()绑定到一个按钮。 我已经通过创建一个QMessageBox来测试connect函数的工作原理,该QMessageBox在单击按钮时打开。

connect(openButton, SIGNAL(clicked()), this, SLOT(OpenDirectory()));

代码:

void QtReader::OpenDirectory()
{
     QString openPath = QDir::toNativeSeparators(cpath);
     QDesktopServices::openUrl(QUrl::fromLocalFile( qApp- 
     ApplicationDirPath()+QDir::separator()+"ReaderArchives")); //current working code
}

cpath声明:

  QString cpath = qApp->applicationDirPath()+QDir::separator()+"ReaderArchives";

标头文件

public:
    explicit QtReader(QWidget *parent = 0);
     ~QtReader();
     QString cpath, spath, tpath;

2 个答案:

答案 0 :(得分:0)

您必须确保将您的网址解释为本地文件路径,请尝试以下操作:

QDesktopServices::openUrl(QUrl::fromLocalFile(cpath));

请注意,无需使用QDir::toNativeSeparators(),转换会以这种方式自动完成。

修改

cpath声明是您问题的原因,我不确定您的意思,以及您将 decleration 放在哪里,但我您认为您正在声明一个具有相同名称cpath且具有另一个范围的新变量,然后在您的OpenDirectory()中引用尚未分配给未初始化成员QString cpath还没有任何值,所以省略 decleration 并在构造函数中以这种方式为成员cpath赋值:

cpath = qApp->applicationDirPath()+QDir::separator()+"ReaderArchives";

答案 1 :(得分:0)

根据 QDesktopService::openUrl(...) 的文档,期望URL指示scheme name,对于本地文件,该URL为:file-在以下情况下使用您使用 QUrl::fromLocalFile(const QString & pathFileName) 格式,但是在我看来,您并没有在原始的无效代码中添加所需的file://前缀。