2017-09-14 9 views
-1

Qt 5.9を使用するスプレッドシートプログラムをコード化し、Qt Installer Framework(QtIFW2.0.1)でインストーラを作成しました。それから私は多くの友達にプログラムを送った。彼らはWindowsマシンにアプリをインストールして使用していましたが、すべて共通の問題があります:
アプリのファイルを保存すると、デスクトップ上に「不明」ファイルとして表示されます。Qt/C++プログラムがWindows上で知られているファイルタイプを表示する

問題は、保存されたファイルの機能性ではなく、その形状と外観のみであり、ダブルクリックするとアプリケーションによって開かれます。

問題は、プログラムのファイルの形状や外観がわかっているようにするには、コードのどのような変更が必要なのでしょうか?
たとえば、画像ファイルなどを使用して特定の形状にコードを提供し、保存されたファイルにマップされ、既知の形で表示されます。

+0

私はgues「不明」のファイルによって、あなたはファイル拡張子について話しているのですか? like "savedfile.mytype"そして、あなたはこのファイルがWindowsエクスプローラのアイコンでうまく見えるようにしたいですか?私は正しい? – Xplatforms

+0

はい。あなたは正しいよ – Franky

答えて

2

これは実際にはQtやC++自体とは関係ありません。ファイル拡張子をWindowsシェルに登録するだけで、他のWindowsコンポーネント/シェルでも理解できるようになります。

ここには、windows下のFile Types and File Associationsに関する一般的な情報があります。

example.reg:あなたはこのようになり、いくつかのWindowsレジストリのエントリにする必要があり

あなたはそれが一般的な

変更myfirm.myapp.v1.myextensionでどのように機能するかを読み取ることができ

Windows Registry Editor Version 5.00 

    [HKEY_CURRENT_USER\Software\Classes\myfirm.myapp.v1\shell\open\command] 
    @="c:\path\to\your\app.exe \"%1\"" 
    [HKEY_CURRENT_USER\Software\Classes\.myextension] 
    @="myfirm.myapp.v1" 

Hereをし、あなたの.exeへのパスをあなたの好みの名前にします。 Windowsは、拡張子が.myextensionのファイルをあなたのアプリケーションで開くべきであることを知ります。このファイルをダブルクリックすると、アプリはpath to fileを引数として実行されます。あなたはmain()ファンクションで入手できます

Software\\Classes\\.myextension\\DefaultIconにレジストリエントリを追加して、デフォルト値をアプリのフルパスに設定すると、.exeアプリファイルから拡張子のアイコンを取得できます。

あなたはまた、あなたのアプリケーション内で直接実行時にそれを行うことができます。

QSettings s("HKEY_CURRENT_USER\\SOFTWARE\\CLASSES", QSettings::NativeFormat); 
    s.setValue(".myextension/DefaultIcon/.",QDir::toNativeSeparators(qApp->applicationFilePath())); 
    s.setValue(".myextension/.","myfirm.myapp.v1"); 
    s.setValue("myfirm.myapp.v1/shell/open/command/.", QDir::toNativeSeparators(qApp->applicationFilePath()) + " %1"); 

EDIT:Qtのインストーラでそれを行うには、もう一つは答えを見てhere

+0

ありがとう。私は完全にそれを読んでいないが、私はそれが私にレジスタを操作したいと思う。だから私は別のアプリをインストールするときに私はregisteryを操作しないでください?これは、アプリケーション自体がユーザではなくレジスタで(コードによって)操作するためです。また、私はレジストリに入ることができない普通のユーザーのためにアプリを送ると仮定します。彼らはアプリで何をすることができますか?私は最も簡単な英語の文章を使って問題を表現しようとしています。「私は自分自身で登録などを操作したくないので、他のアプリと同じように、すべてのユーザーのためにアプリケーションを操作したい – Franky

+0

私の答えは最後まで読んでいますか?最後にQtコードがあります。この4行のコードをアプリケーションコードにコピーして、 "myfirm.myapp.v1"と ".myextension"をあなたのアプリケーションコードに変更してください。値... – Xplatforms

+0

OK、私はあなたの答えを読んで、ありがとう。他のスレッドのスクリプトファイルコードとここで記述したコードの両方を使用する必要がありますか?私はプログラム内に多くのファイルと関数を持っていますが、* QSettings *という名前のMainWindow :: readSettings()*と* void MainWindow :: writeSettings()*という2つの関数があります。コードを見てください(https://www.dropbox.com/s/ebv4qvol49rrqd3/SP.rar?dl=0)。 – Franky

関連する問題