我有一个简单的代码:
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等等。但是这里它根本不起作用,在两个独立的平台上。我错过了什么?
答案 0 :(得分:2)
QDesktopServices是Qt 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;
}