QDesktopServices :: openUrl在两个平台

时间:2016-06-18 15:32:34

标签: qt

我有一个简单的代码:

int main() {

   QUrl url("http://google.com");
   if (!QDesktopServices::openUrl(url)  )
       qDebug() << "Failed to open url";

   return 0;   
}

运行代码会显示“无法打开网址”。使用Qt 5.5.1在Ubuntu上进行尝试,在使用Qt 5.7的MS Windows上进行尝试。没有区别。

本地文件也无法打开:

int main() {

   QString file = "/home/user/testfile.pdf";
   if (!QDesktopServices::openUrl( QUrl::fromLocalFile(file)  ) )
       qDebug() << "Failed to open file";

   return 0;   
}

再次,“无法打开文件”。在Ubuntu和Windows上。我可以在stackoverflow中看到有关openUrl的一些讨论,但它们关注的是特定的功能,例如无法打开带空格的URL等等。但是这里它根本不起作用,在两个独立的平台上。我错过了什么?

1 个答案:

答案 0 :(得分:2)

QDesktopServicesQt GUI模块的一部分。因此,为了使用与QDesktopServices相关的任何函数,您需要至少实例化QGuiApplication

  

由于QGuiApplication对象进行了很多初始化,因此必须进行初始化   在与用户界面相关的任何其他对象之前创建   创建

事实上,你可以创建一个QApplication(如@Alex Spataru建议的那样),因为它继承了QGuiApplication。要使代码正常工作,您只需要:

int main(int argc, char *argv[]) {

   QApplication app(argc, argv); // just this line

   QUrl url("http://google.com");
   if ( !QDesktopServices::openUrl(url) )
       qDebug() << "Failed to open url";

   return 0;   
}