-->

Qt

ListViewにファイルをドラッグ&ドロップできるようにしてみる。ListViewにファイルをドラッグ&ドロップするとそのファイルのフルパスがListViewに追加されるようなプログラムを作ってみた。

QListViewを継承したListViewってクラスを用意する。dragEnterEvent()、dragMoveEvent()、dropEvent()メソッドをオーバーライトして処理を実装する。

次のような感じ(プロジェクトをまとめたのを後に貼っとく)

続きを読む
このエントリーをはてなブックマークに追加

QtでmacOS用にビルドするとAPP Bundleでできるんだけど、アイコンがデフォルトだったり、ダイナミックリンクライブラリが入ってなかったりするので、それをいい感じする方法をメモっておく。忘れそうなんで(^^;)

まず、アイコン。
まずは、

  • アイコンをPNGファイルで1024x1024、512x512、256x256、128x128、64x64、32x32、16x16のサイズで作る。
  • PNGファイルから拡張子icnsっていうファイルを作る。
    • Xcodeを起動して新規のmacOSのAppを作る。(SwiftUIのアプリにしてみた)
    • 左側のリストからAssets.xcassetsを選んでAppIconを選ぶ。
    • それぞれサイズのところにPNGファイルをドラッグ&ドロップする。
    • ビルドする。
    • ~/Library/Developer/Xcode/DerivedData/<プロジェクト名>-<何かアルファベット列>/Build/Products/Debug/<プロジェクト名>.app/Contents/Resources/AppIcon.icnsがアイコンファイルになる。

アイコンファイルはコマンドラインでiconutilを使っても作れる。

  • AppIcon.icnsをQtのプロジェクトにコピーする。
  • Qtのプロジェクトファイル(*.pro)をテキストエディタなどで開いて"ICON = AppIcon.icns"を追加する。
  • ビルドするとアイコンが設定されたBundleが作れる。

次は、ダイナミックリンクライブラリを含める。

  • Qtをインストールしたディレクトリの<Qtのバージョン>/clang_64/bin/にあるmacdeployqtを"macdeployqt app-bundle"のように実行する。

これでダイナミックリンクライブラリが含まれる。



このエントリーをはてなブックマークに追加

いつからかわかんないけど、Qtウィジェットアプリケーションで漢字を表示するといわゆる中華フォントになるようになったんだよねー。こんなふうに。

kanji1

続きを読む
このエントリーをはてなブックマークに追加

QGraphicViewを使って画像ファイルを表示してみる。

手順はこんな感じだ。

  • 画像ファイルを読み込む。
  • 画像をQGraphicsPixmapItemに変換する。
  • 画像(QGraphicsPixmapItem)をシーン(QGraphicsScene)に追加する。
  • グラフィックスビュー(QGraphicsView)にシーンを設定する。

ちょうど、QGraphicsViewが額縁やフォトフレーム、QGraphicsSceneがキャンバスや写真、QGraphicsPixmapItemはキャンバスに描かれたり、写真に撮られたりする物になる。QGraphicsPixmapItemの部分は正確にはQGraphicsItemを継承したクラスのインスタンスが使え、矩形やポリゴンなどもある。

Widgetのプロジェクトを作成する。
UIにGraphics Viewとボタンを貼る。ボタンを押したらC:\tmp\hoge.pngを読み込んで表示するようにしたいと思う。
WidgetクラスにQGraphicsSceneを追加する。

    QGraphicsScene scene;

ボタンを押した時の処理を次のようにする。

    // イメージファイルを読み込む
    QImage image("c:\\tmp\\hoge.png");

    // イメージをシーンに追加する。
    QGraphicsPixmapItem *image_item = new QGraphicsPixmapItem(QPixmap::fromImage(image));
    scene.addItem(image_item);

    // シーンをQGraphicsViewに設定する。
    ui->graphicsView->setScene(&scene);

このエントリーをはてなブックマークに追加

ファイルオープンダイアログを出してみる。

    QString filename = QFileDialog::getOpenFileName(this, tr("hoge"), "c:/",
                                                    tr("Text files(*.txt);;All Files(*.*)"));

ケッコー簡単。ファイルオープンダイアログでキャンセル押すとfilenameはNULL文字列になる。

getOpenFileName以外にもファイルやディレクトリ選択関係のダイアログが表示できる。

getOpenFileName ファイルを1つ選択できるダイアログが表示される。
getOpenFileNames ファイルを複数選択できるダイアログが表示される。
getOpenFileUrl ファイル(リモート)を1つ選択できるダイアログが表示される。
getOpenFileUrls ファイル(リモート)を複数選択できるダイアログが表示される。
getExistingDirectory ディレクトリを選択できるダイアログが表示される。
getExistingDirectoryUrl ディレクトリ(リモート)を選択できるダイアログが表示される。
getSaveFileName ファイル保存ダイアログが表示される。
getSaveFileUrl ファイル(リモート)保存ダイアログが表示される。

リモートとそうでないのはWindowsでは違いがないように見えるな~~。
別のプラットフォームだと違うのかもしれないです。(未確認)


このエントリーをはてなブックマークに追加

↑このページのトップヘ