• ベストアンサー

Qt ウィンドウの状態保存

はじめて質問します。 Qtで、ウィンドウの場所(座標)や高さ、幅を記録して、 次に同じウィンドウを開いたときに 記録した状態を再現したいのですが、 レジストリではなく設定ファイル(iniとか?) に保存しようと思います。 設定ファイルは後でいじりやすいように、 x座標、y座標、高さ、幅、といった項目を それぞれ分けてつくろうと思うのですが、 再現時はsetGeometryでいけそうですが、 記録しておくときはどのようにすればよいでしょうか。 saveGeometryだと各項目を分割できなさそうで悩みます。 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8524/19375)
回答No.1

>次に同じウィンドウを開いたときに >記録した状態を再現したいのですが、 以下のようにします。 http://pido.seesaa.net/article/183717126.html >設定ファイルは後でいじりやすいように、 >x座標、y座標、高さ、幅、といった項目を >それぞれ分けてつくろうと思うのですが、 >再現時はsetGeometryでいけそうですが、 >記録しておくときはどのようにすればよいでしょうか。 前述の方法以外で保存、再現するのはお勧め出来ません。 一応 setting.setValue("left",frameGeometry().x()) setting.setValue("top",frameGeometry().y()) setting.setValue("width",geometry().width()) setting.setValue("height",geometry().height()) とかってやれば保存できますが、再現時に「Ubuntuだとウィンドゥ位置がズレていく」という問題が出ます(Windows版とUbuntu版で挙動が異なる、と言う問題がある) この「Windows版とUbuntu版で挙動が異なる」という問題は「saveGeometry()とrestoreGeometry()をペアにして使う」という方法で解決するしか手はありません。 当然ですが「Windows版とUbuntu版で挙動が異なるようなプログラムを書くのは良くない」ので「事実上、位置情報をバラバラにiniファイルに記録するのは良くない」です。

saralinlin
質問者

補足

早速のご回答ありがとうございます。 回答への返信方法が補足からでよいのか不安ですが、間違っていたら申し訳ございません。 OSによって挙動が変わるのですね。 開発OSではなく利用するOS、という意味で 合っていますでしょうか。 「saveGeometry()とrestoreGeometry()をペアにして使う」という方法でしか 解決できないのであれば、 設定ファイルを使うのは あきらめた方が良さそうですね。 saveGeometry()では どのような内容がどのような順番で取得できるのか 調べても見つけられずよくわかっていないのですが、 たとえばx座標だけ書き換えてrestoreGeometry()で移動するといったこともできるのでしょうか。 x座標、y座標は一定の範囲内になるよう 修正する可能性があるのですが、 QByteArrayをそのまま修正するのは バイナリなので難しいかなと思いました。 お忙しいところ申し訳ございませんが、 ご返信頂けますと幸いです。

関連するQ&A

  • Notesの保存ダイアログで表示される、最終保存パスの記録先

    Notesでメールの添付ファイルを保存するとパスを記憶しており、次回添付 ファイル保存時保存ダイアログで同じフォルダが表示されますが、この最終 保存パスはどのファイル又はレジストリへ記録されているのでしょうか? notes.iniやレジストリを見たところ該当の項目がありませんでした。 notes.iniのFileDlg・・という項目にパスが記載されていますが、この項目の パス変更しても、添付ファイル保存時にダイアログで指定したパスが表示さ れませんでした。 よろしくお願いいたします。

  • グラフの変化をアニメにするには?

    時間、X座標、Y座標のデータを使って、その軌跡を再現したいと考えています。 再現自体はエクセルのグラフ(散布図)とVBAを使えば難しくはないのですが、 グラフの変化(軌跡の再現)を動画ファイルやGIFアニメとして保存することは可能でしょうか?

  • レジストリと構成設定 (.ini)ファイルについて

    レジストリと構成設定 (.ini)ファイルについて ソフト(アプリケーション)のフォルダを見ると、構成設定 (.ini)ファイル が有るソフトと無いソフトがあります。私の知識としては「構成設定 (.ini)は WIN95以前の古い設定記録形式で、現在はレジストリに設定データを記録 するのが一般的になっている」ですが、合っているでしょうか? また、構成設定 (.ini)ファイル形式を取っているソフトはレジストリには いっさい手を加えて無いと思っていいのでしょうか? それと、あえて今でも構成設定 (.ini)形式を取っている理由はなぜですか? ちなみにフリーソフト(AviUtl,PV4,リネームソフト等)に構成設定 (.ini)ファイル を使っているものが多い気がします。 よろしくお願いします。

  • フリーソフトを作成する時、パスワードをINIに保存させる時暗号化するには?

    フリーソフトを仮に作るとして、パスワードを設定しないと 変更することのできない設定項目があるとして、 そこに入力したパスワードをINIファイルに保存しておきたいと 考えます。 しかし、ただパスワードをINIファイルに保存しただけでは INIファイルの場所がわかればすぐに中身を開いて判別されてしまう と思います。 あるフリーソフトで同じようなことをやっていたのですが、 そのソフトのINIファイルには Password=83BBB6C5B8C5B6C5C4 みたいな感じになっていました。 こういう風に保存するにはどのようにすればよいのでしょう? また、プログラム内でどのように戻しているのでしょうか? どなたか教えて下さい。

  • なにゆえwindows?

    会社の業務用アプリがwindows専用で使用していますが windowsは非常に設定が難しく感じます キーボードのマッピングを変えたいのに 設定場所がレジストリというバイナリファイルになっています なぜもっと簡単に設定できないのでしょうか? windowsを使った感想は デフォルトで様々なサービスが稼働しているが必要性などが不明 色々な設定がレジストリというバイナリなど不明点が多いです なぜwindowsを使う人が多いのでしょうか?使いやすいでしょうか? unix系のOSならサービスは何を行うのか明確ですし 設定項目も基本はテキストファイルで明確です 自分で何をやっているのか明確で安心だと思います windowsを好きで使用している方っているのでしょうか?

  • qtのエラー

    【大至急】qt creatorで、プロジェクトをデフォルトの設定のままビルドして、debugフォルダーにある実行ファイルを実行したところ、 libicuin73.dllがありませんというエラーメッセージが出てきて実行できませんでした。linuxでビルドした場合はこのようなメッセージは出ませんが、windowsでビルドすると以上のようなエラーが出るようです。改善方法を教えてください。

  • 画面のプロパティで、文字がウインドウからはみ出して、正常に設定できません

    タイトルのとおりです。 僕はNeoMagic MagicMedia256AVというやつを使っています。 それで、画面のプロパティののなかの詳細でテレビ出力をするのですが、その設定タブ が異常なフォントのサイズになってしまいウインドウに入らなくなってしまいました。 原因は全く不明なのです。 その異常なウインドウを見てください。 http://fukuoka.cool.ne.jp/shinworld/ijyou.jpg はみ出してしまい、ウインドウ下に表示されるボタンなどがありません。 それで、設定ができないので、どうにか解決できないものでしょうか? たぶんレジストリかiniファイルなどがおかしくなっているのではないかと思いますが、ドライバも再インストールして、レジストリやINIファイルを探してみたのですが、僕では対応できませんでしたのでどうにか、解決法を教えてもらえないでしょうか。お願いします。

  • Windows XPで、iniファイルを編集後保存する方法について

    現在、Windows XPにセキュリティ製品(認証機能)をインストールして、設定を行なっています。 USBメモリに格納された「証明書」を使ってリモートアクセス時の認証をする製品です。 認証時のパスワードを入力する際の設定(何文字以上のパスワードなら許可するかなど)は、iniファイル(etpass)の編集で行なうようなのですが、このファイルを編集できません。 C:\WINDOWS\system32\etpass.iniをメモ帳で開いて編集後に保存しようとしても、”SYSTEMが使用中”といったメッセージがでて、保存できません。(編集まではできます) そこで、このiniファイルをつかんでいると思われるシステムファイルをタスクマネージャを開いて削除(「プロセスの終了」)しようとしても、削除もできません。 このiniファイルを編集する方法を教えていただけますでしょうか? どうぞ宜しくお願いいたします。

  • デスクトップの状態の保存について

    デスクトップの状態を保存して、起動する度に保存された状態に戻してくれるフリーソフトを探しています 共同で使用しているパソコンなのですが、デスクトップにファイルを保存して放置する人が多くて困っています そのため、起動するたびに、残しておくよう設定されたものを除き、新しく作成されたフォルダやファイルを全て消去してくれるソフトを探しています マンガ喫茶等のパソコンが、起動の度に所定の状態を復元するようになっていると思うのですが、あの機能を再現したいのです デスクトップアイコンの位置を保存するソフトはあったのですが、新規作成されたファイルを削除までしてくれるものは見つからなかったので、質問させていただきます よろしくお願いします

  • INIファイルへの保存について

    いつもお世話になります。 指定場所のINIファイルにウィンドウが閉じられた時の 座標位置を保存しようとしています。 API関数をMFCの中で用いたいのですが、現時点の知識量では 下記程度のソースしか思い浮かびません。 ネット上などいろいろ調べてみたのですが、 わからずじまいです。 ご教授よろしくお願い致します。 開発環境はVC++6.0MFCです。 CRect q; GetWindowRect(&q); WritePrivateProfileString("PROGRAMDATA", "WindowPlaceL", q.left,"INIファイルへのフルパス"); WritePrivateProfileString("PROGRAMDATA", "WindowPlaceT", q.top,"INIファイルへのフルパス");

専門家に質問してみよう