2016-06-18 6 views
0

上の私は、このような単純なコードを持っている:QDesktopServices :: OpenURLのが動作しません、どちらもURLのもローカルファイルのため、2つのプラットフォーム

int main() { 

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

    return 0; 
} 

コードを実行するには、「URLを開くことができませんでした」を与えます。 UbuntuでQt 5.5.1を試し、MS WindowsでQt 5.7を試してみました。変わりはない。

ローカルファイルも開きません。

int main() { 

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

    return 0; 
} 

は再び、 "ファイルを開くことができませんでした"。 UbuntuとWindowsの両方で。私はopenUrlに関するいくつかの議論をopenUrlについて見ることができますが、スペースでURLを開けないなどの特定の機能に関係しています。しかし、ここでは2つの独立したプラットフォーム上で全く動作しません。何が欠けていますか?

+0

あなたのコンピュータにデフォルトのWebブラウザの特定の設定がありますか?例はうまくいくようです。 – johngull

+0

UbuntuではデフォルトブラウザはFirefox、WindowsではChromeです。私は特別な設定をしていませんでした。 – Maximko

+0

私が今見つけたのは、同じQDesktopServices :: openUrlをスタンドアロンコードではなく、より大きなGUIアプリケーションのコンテキスト内で使用すると、開発中です。 (UbuntuとWindowsの両方)。 openUrlがうまくいくためにはいくつか追加のものが必要なようですが、上記の例をコンパイルする際に依存関係のエラーが発生しないのはなぜですか? – Maximko

答えて

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; 
} 
関連する問題