我正在尝试使用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;
答案 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://
前缀。