首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QDesktopServices openUrl不打开

QDesktopServices openUrl不打开
EN

Stack Overflow用户
提问于 2016-01-02 07:36:01
回答 2查看 1.7K关注 0票数 1

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

代码语言:javascript
复制
QString openPath = QDir::toNativeSeparators(cpath);
QDesktopServices::openUrl(QUrl(cpath, QUrl::TolerantMode));

但是,上面的代码什么也不做。

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

代码语言:javascript
复制
connect(openButton, SIGNAL(clicked()), this, SLOT(OpenDirectory()));

代码:

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

cpath声明:

代码语言:javascript
复制
  QString cpath = qApp->applicationDirPath()+QDir::separator()+"ReaderArchives";

头文件

代码语言:javascript
复制
public:
    explicit QtReader(QWidget *parent = 0);
     ~QtReader();
     QString cpath, spath, tpath;
EN

回答 2

Stack Overflow用户

发布于 2016-01-02 09:53:18

您必须确保您的url被解释为本地文件路径,请尝试如下:

代码语言:javascript
复制
QDesktopServices::openUrl(QUrl::fromLocalFile(cpath));

注意,不需要使用QDir::toNativeSeparators(),转换是以这种方式自动完成的。

编辑:

您对cpath的声明是造成您的问题的原因,我不知道您的意思是什么,以及您将解密放在哪里,但我认为您是在声明一个具有另一个作用域的同名cpath的新变量,然后在您的OpenDirectory()中您指的是未初始化的成员QString cpath,该成员尚未被分配给任何值,因此省略您的解密,在构造器中以这种方式为成员cpath分配一个值:

代码语言:javascript
复制
cpath = qApp->applicationDirPath()+QDir::separator()+"ReaderArchives";
票数 1
EN

Stack Overflow用户

发布于 2019-05-18 20:57:23

根据QDesktopService::openUrl(.)的文档,它需要一个方案名称,表示本地文件的URL是:file --当您使用QUrl::fromLocalFile(const QString & pathFileName)表单时,这是预先准备好的,但在我看来,您并不是在原始的、不工作的代码中添加所需的file://前缀。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34563734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档