ユーザ用ツール

サイト用ツール


ハイハイスクールアドベンチャー_qt版

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

次のリビジョン
前のリビジョン
ハイハイスクールアドベンチャー_qt版 [2024/02/06 13:23] – 作成 arakiハイハイスクールアドベンチャー_qt版 [2024/02/08 08:44] (現在) – [Qt5/Qt6の互換性] araki
行 39: 行 39:
 ソースはM5版同様[[https://github.com/wildtree/qhhsadv.git|GitHub]]から取得可能である。 ソースはM5版同様[[https://github.com/wildtree/qhhsadv.git|GitHub]]から取得可能である。
 [[https://www.wildtree.jp/~araki/HHSAdv_data.zip|データファイル]]は ~/.HHSAdv の下に展開する。 [[https://www.wildtree.jp/~araki/HHSAdv_data.zip|データファイル]]は ~/.HHSAdv の下に展開する。
 +
 +GitHubからは git clone で取得する。
 +<code>
 +$ git clone https://github.com/wildtree/qhhsadv.git
 +</code>
  
 QtCreatorを使用する場合には、CMakeLists.txt がプロジェクトファイルになる。 QtCreatorを使用する場合には、CMakeLists.txt がプロジェクトファイルになる。
行 116: 行 121:
  
 最後、最小サイズを指定してやらないとダイアログが極小になってしまうのでこれがある意味キモ。 最後、最小サイズを指定してやらないとダイアログが極小になってしまうのでこれがある意味キモ。
 +
 +なお、QMessageBoxを継承した場合は void about()も定義しなおしておかないといけない。
 +最後の setMinimunSize()に関しては、StyleSheetでやっている例もあったが、QLabel { min-width: 300 px; min-height: 300 px; }みたいにしてしまうと、textだけでなく、アイコンの方もそのサイズにされてしまうので、アイコン付きの about()では都合が悪いのだ。
 +
 +<code>
 +void
 +ScrollMessageBox::about(QWidget *parent, const QString &title, const QString &text)
 +{
 +    ScrollMessageBox *scrBox = new ScrollMessageBox(QMessageBox::Icon::Information, title, text, QMessageBox::StandardButton::Ok, parent);
 +    scrBox->setAttribute(Qt::WA_DeleteOnClose);
 +    QIcon icon = scrBox->windowIcon();
 +    QSize size = icon.actualSize(QSize(64, 64));
 +    scrBox->setIconPixmap(icon.pixmap(size));
 +
 +    scrBox->exec();
 +}
 +</code>
 +
 +Qt::WA_DeleteOnClose をセットしておくことで、ダイアログを閉じたら勝手に削除してくれるので staticな関数なのに、オブジェクトを返さずにすむ。
 +お手軽だが、こんなの、Qtのソースみないとわからない。
 +
 +==== Qt5/Qt6の互換性 ====
 +
 +主に[[uConsole]]でコード書いていた関係で、Qt5を使って開発したため、Qt6で動くかどうかとか全然ちゃんと調べてなかった。
 +[[DevTerm]]の方は逆にQt6をインストールしてあったので、そっちでビルドできるかトライしたらあっさりこけた。
 +
 +ただし、こけたのは QMediaPlayer 周り。
 +
 +音鳴らす機能はおまけなのでなくてもいい。
 +
 +とりあえず、動作チェックのために、Qt6 なら飛ばすようにした。
 +
 +<code>
 +#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
 +        _mp.setMedia(QUrl::fromLocalFile(files()->mp3_file(sound_names[n]).c_str()));
 +        _mp.setVolume(100);
 +        _mp.play();
 +#endif
 +</code>
 +
 +ざっくり、Qt6.0.0より前のバージョンの時だけコンパイルされるようにした。
 +
 +でも待って。Qt6のリファレンスにサンプルコードあるじゃん。
 +ってことで、速攻で Qt6用のコードも追加した。
 +音もちゃんと鳴った。
 +
 +<code>
 +#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
 +        _mp.setMedia(QUrl::fromLocalFile(files()->mp3_file(sound_names[n]).c_str()));
 +        _mp.setVolume(100);
 +        _mp.play();
 +#else
 +        _mp.setAudioOutput(&_audio);
 +        _mp.setSource(QUrl::fromLocalFile(files()->mp3_file(sound_names[n]).c_str()));
 +        _audio.setVolume(100);
 +        _mp.play();
 +#endif
 +</code> 
 +
 +ボリュームの制御が QAudioOutput に移されてて、あとは setMedia()が setSource()になっただけ。
 +とはいえ、違いは違い。
  
ハイハイスクールアドベンチャー_qt版.1707193412.txt.gz · 最終更新: 2024/02/06 13:23 by araki