【Win/Mac/Linux/Android/iOS】 Qt 総合スレ 18©2ch.net

1デフォルトの名無しさん 転載ダメ©2ch.net2017/03/08(水) 13:49:03.39ID:jMX+hATM
Qt(キュート)は C++ ベースのフレームワーク&RAD開発環境です。

ライブラリの機能は、フォーム、ボタンなどの各種ウィジェットからネットワーク、マルチスレッド、
グラフィックス(OpenGL)や各種コンテナ、XMLパーサー、組み込み JavaScript など、非常に多岐に渡ります。
公式の統合開発環境「Qt Creator IDE」を使えば、クロスプラットフォーム対応のRAD開発が可能です。
また、EclipseやVisual Studio上で開発したい人のためのアドインも用意されています。

■主な対応プラットフォーム(デスクトップ用途の場合)

Windows XP, Vista, 7
Mac OS X 10.4, 10.5, 10.6
Linux

■ライセンス

・オープンソース版(Open-source version)
 LGPL 2.1 または GPL 3.0 のうちどちらかを利用者が選べます。
 LGPL を選んだ場合はソースコード非公開のままでの商用利用が可能です(いくつか制限あり)。
 ※正確には通常「LGPL+商用利用向きの例外条項」を選ぶことにな7ります(Qtインストール先の「LGPL_EXCEPTION.txt」を参照)。
  ちなみにGPLでも商用利用が不可能というわけではありません、念のため。
・商用版(Commercial version)
 こっちはDigia社か日本の代理店(SRA社)とライセンス契約(年間30万くらい?)を結んで使います

■Qt を使って作られたソフト例

KDE、Maya、Adobe Photoshop Elements、Google Earth、Skype、DAZ Studio
MotionBuilder、RealFlow、Nuke、LuxRender、Mathematica、Kindle、VirtualBox、
RuviEdit、さくさくエディタ など

■前スレ
【Win/Mac/Linux/Android/iOS】 Qt 総合スレ 17
http://echo.2ch.net/test/read.cgi/tech/1438593408/

535デフォルトの名無しさん2018/02/01(木) 20:51:27.69ID:WdZXEzSH
jetbrains toolboxってQt製だけどUIはQtWebEngine使ってjavascriptで作ってるんだね
Qtの正しい使い方って感じがする
Qtがデスクトップで生き残るにはこれしかない

536デフォルトの名無しさん2018/02/02(金) 08:58:23.15ID:mtPYhkU1
>>529
もしかして.runファイル使ってインストールした?
それするとqmakeが正常に働かないけど

537デフォルトの名無しさん2018/02/02(金) 21:40:25.23ID:Y8CLfwV+
>>534
ロクにやってることも知らないのによく Qt のバグとか言えるなあ。
qmake -project がやってることはカレント以下のフォルダを再帰的にたどって .cpp やら .h のリストを作ってるだけ。
カレント以下に symbolic link があって再帰してるか、必要なないフォルダへにリンクしてるだけじゃないの?

538デフォルトの名無しさん2018/02/03(土) 03:17:29.77ID:9GN0bJzK
>>537
やってることは知っているよ、
そういうのを判断するように作っていないとしたらQtのバグだというのすらわからないのだな。

539デフォルトの名無しさん2018/02/03(土) 04:56:29.54ID:pNC8Ba1v
仕様がないやつだな

540デフォルトの名無しさん2018/02/03(土) 09:35:11.05ID:mkM/JjB2
本体横の音量ボタンを無効にすることはできませんか?
一定の音量で固定することが目的で、代替案でも嬉しいです

541デフォルトの名無しさん2018/02/03(土) 09:38:33.36ID:mkM/JjB2
スレ間違い、スルーでお願いします

542デフォルトの名無しさん2018/02/03(土) 09:39:15.09ID:qWVkS+Es
「どこの誤爆か?」
と書こうとしたけどやめて正解だった

543デフォルトの名無しさん2018/02/03(土) 12:15:03.86ID:GfLK8gwV
>>538
へー、わかってるのにわざわざ2時間以上待ってたんだ。だったらそもそも help me とか言う必要ないよね。
自分で recursive な link 作っておいてツールのバグとか意味不明だわ。

544デフォルトの名無しさん2018/02/04(日) 02:12:12.27ID:1Y8OypDc
>>543
賢いプログラムならrecursive linkは考量する
もしそれを考えてqmakeが作られていならそれはバグ

545デフォルトの名無しさん2018/02/04(日) 15:32:51.78ID:ZPadave1
賢くないプログラムを使いこなせるのは賢い人だけ

賢くない人はバグレポも出さずに文句を言い続ける

546デフォルトの名無しさん2018/02/05(月) 21:11:46.11ID:aqaKodzT
QListView + QStandardItemModel + QStandardItem で
画像のサムネイル表示を作っています。

一先ず、拡張子のアイコンを表示しておいて、
QtConcurrentRun::run で 差し替えているのですが、

マウスオーバー とか resize 等 が 発生しないと反映されません。

よくわかってないまま、
emit model->itemChanged(item)
とやってみたりしたのですが、うまくいっておりません。

こういう場合どうすればよいのでしょうか?

547デフォルトの名無しさん2018/02/06(火) 00:57:31.38ID:DvM/fAAV
>>546
ああそれはね。AbstructItemModelに対して
モデルをリセットすると宣言すればいいのよ。

つまり、
emit beginResetModel()
emit endResetModel()
を呼び出す。当然ながら2つのemitの間でモデルの差し替えを行う。

548デフォルトの名無しさん2018/02/06(火) 18:48:50.65ID:OhWB5yb3
>>547
ありがと♡ちゅっ♡😘

5495462018/02/06(火) 20:52:49.33ID:/YB/aLbm
>>547
ありがとうございます。期待していた挙動になりました。

modelで制御するんですね。

550デフォルトの名無しさん2018/02/06(火) 22:40:54.52ID:Ck+HSl15
http://blog.qt.io/blog/2018/02/06/sharing-files-android-ios-qt-app-part-3/
androidかiosでQt使ってる会社ってあるのかな

5515462018/02/10(土) 19:40:37.42ID:q+UFelfE
beginResetModel を使用して 1枚づつ更新できるようになったのですが、
選択アイテムが初期化されたりと、意図しないstateのreset が起きて困ってます。
(スクロール状況中だと戻ったりもしました)

できれば、item毎に更新したいのですが、どうすれば良いでしょうか?

552デフォルトの名無しさん2018/02/10(土) 22:17:53.93ID:8uL8roEq
今のPCだと1秒で20枚以上の画像ファイルサムネイルを作れるはずなので、
1枚ごとにアイコンを再描画したいと考えるのは馬鹿げていると思う。
毎秒数回程度に再描画の数を抑えるべき。

サムネイル画像のサイズは高々知れているので、
数百万個を一度に処理するというのでなければオンメモリで持っていて良い。
QVectorやQListなどに出来上がり次第入れていき、ときどき前再描画とかでいいのでは。

何番目のアイコンを選択してるかは自前で保持しておけばいい。

553デフォルトの名無しさん2018/02/11(日) 00:06:53.41ID:5pa79NTQ
>>552
アドバイスありがとうございます。

描画頻度に関しては、ご指摘のとおりであり、
1秒毎にでききた分を差し替えるようにしていました。

551 の件は、描写頻度に関係なく 発生していましたので、
単純化して質問しました。
勝手に省いて申し訳ありませんでした。


> 自前で保持
reset 前後で、currentIndexを保持、復元を試しみましてみましたが、
いまのところ上手くいってません。試行錯誤してみます。


個人的には、
変更をmodel に通達したら、view が必要に応じて描画ってなって欲しいのですが、
できないのでしょうか?

reset は、強力すぎるというかやりすぎという感じがしてしまいます。

554デフォルトの名無しさん2018/02/11(日) 00:57:36.52ID:TVBa8eL+
>>547
で書いたemit は不要だったね。こいつは通常のメソッドであってSIGNALではなかったようだ。

QListWidgetItemの実装を眺めたけどsetData()で結局 model->itemChanged(this)を呼び出してるから
それでいいんじゃね?

ちなみにQListModel::itemChanged()内で再度 emit dataChanged(idx, idx)を呼び出しているようだ。

ただし知ってると思うけどQlistWiget系は追加するたびに
再描画が発生するからフォルダ表示的な用途にはおそすぎて使えない。

555デフォルトの名無しさん2018/02/11(日) 01:01:07.29ID:TVBa8eL+
で、カーソルの保持が消滅する件だけど、
私がやったのは初期表示とテキスト検索やボタンチェックで
表示リストを絞り込むような事を実装したから
元々カーソルの位置を保持する必要はなく、正直やってないのでわからない。

アイコンは2万件ほど登録したけど問題なく表示できる。
ついでにいうとAbstructItemModelは画面に表示されるアイテムの文だけしかアクセスしてこないので、
modelはデータをオンメモリで全部保つ必要はない。

556デフォルトの名無しさん2018/02/13(火) 20:37:01.09ID:yygcbIZh
一先ず

QListViewを派生して、 QListView::dataChanged を public から call できるようにして、
modelからの emit の代替にすることにしました。

次点としては
QListView->viewport()->update() を 適時call でも いけそうです。


嵌っていた点は、クロススレッド で emit(というか signal?) が 保証されてない点でした。
真っ当に対応するなら、クロススレッドの橋渡しを実装なのでしょうが、
スレッドまわりが理解できておらず厳しいです。


ひとまず納得できました。
お付き合いしてくださった皆様ありがとうございました。


>>555
> modelはデータをオンメモリで全部保つ必要はない。
これが、ちょっと気になったのですが、
全部登録しないと件数(というかスクロールバー)が不整合状態になりませんかね?

557デフォルトの名無しさん2018/02/14(水) 08:36:26.70ID:mDeN+3Ew
>>556
QListViewやQTreeViewはダミーノードに対する子要素のかたちで全体の要素数を指定することになるが、
そのときに全件相当する数値を返すだけだからオンメモリでデータを持つ必要はない。

558デフォルトの名無しさん2018/02/14(水) 08:42:35.90ID:mDeN+3Ew
>嵌っていた点は、クロススレッド で emit(というか signal?) が 保証されてない点でした。
あと、こういうときはQFuture/QFutureWatcherを使おう。
まともにマルチスレッドを手作りするのは馬鹿らしい。

559デフォルトの名無しさん2018/02/14(水) 21:53:44.05ID:kMB7mzYE
invokeMethod を使用することで thread 越えできました。

auto index = item->index();
//emit item->model()->dataChanged(index, index);
auto arg = Q_ARG(QModelIndex, index);
QMetaObject::invokeMethod(item->model(), "dataChanged", arg, arg);

これで、model 側から view をcallする必要がなくなりました。

>>558
> QFutureWatcher
document をざっと見た感じ、thread の進捗管理関連しか分かりませんでした。
もう少しヒントになりそうなワードないでしょうか?

560デフォルトの名無しさん2018/02/15(木) 07:15:15.69ID:0Fgr05vi
invokeMethod を使用することで thread 越え
これFAQだけど禁止されてなかった?

561デフォルトの名無しさん2018/02/15(木) 18:09:43.55ID:dbyCEeSz
QtConcurrent::Run()でworkerに仕事させるのが基本。
それから

1. 戻り値のQFutureをコレクションに蓄えてあとで使う
2. QFutureWatcherに設定してSIGNALを発行してもらう

のどちらかで処理するのがQt流。
[2]の場合はQFutureWatcherはコピーコンストラクタがないので
何かのオブジェクトにメンバ変数としてぶら下げる必要がある。

562デフォルトの名無しさん2018/02/16(金) 15:03:45.82ID:dBpGhFbZ

563デフォルトの名無しさん2018/02/16(金) 20:38:11.85ID:9ip8gpus
タッチパネルでTsLibを使ってるんだが
QMLでMouseAreaのonPressedは呼ばれるけど
onReleaseやonCanceledが呼ばれないことが稀にある。
Butttonも同じで押しっぱなしになることが。
TsLibの問題なのかよくわからないけど対処法は無いの?

564デフォルトの名無しさん2018/02/17(土) 00:06:21.28ID:Br03dODR
Linuxなら/dev/event 当たりを観察して調べたらいいんでないの?

ピュアQtでWindows/Linuxでタッチパネル対応やってるけど今のところ致命的な不具合はない。
強いていうとダブルフィンガーのスライドの検出の精度が不十分で
指一本と判定される場合が結構ある。

565デフォルトの名無しさん2018/02/17(土) 06:30:14.43ID:pJmyuaHt
改めて聞かれると微妙なのでもう一度確認は必要だけど
input/eventは必ずReleaseまで出てるように見えていたと思うが
Qtを通さずダイレクトに監視した場合なので
Qtがイベントを取りこぼすことがあるのかと。

566デフォルトの名無しさん2018/02/17(土) 21:42:31.50ID:RLPdE+TN
QML を触る人はドライバ寄りの知識が浅い

というあるある偏見発動中


まぁオレも似たような状況でEvent 拾って試してるうちに、
素のXで試したりして横方向への理解は深まったけども

567デフォルトの名無しさん2018/02/17(土) 21:59:00.38ID:pJmyuaHt
その逆、むしろQt/QMLを触りたて

568デフォルトの名無しさん2018/02/18(日) 01:40:23.14ID:5XuJDoZ7
>>545
qmake が賢くないことの言い訳にもなってないな

569デフォルトの名無しさん2018/02/18(日) 04:00:26.84ID:sS7A8Lf0
>>567
なんかワールドダウンタウン思い出した

570デフォルトの名無しさん2018/02/18(日) 06:19:53.51ID:PVAcL0Ml
それがどういう意味なのかまったくわからん

571デフォルトの名無しさん2018/02/18(日) 17:14:41.64ID:sS7A8Lf0
youtubeで動画見ればわかる

572デフォルトの名無しさん2018/02/18(日) 17:51:31.63ID:PVAcL0Ml
タイトルからしてつまんなそうというか
興味がなさ過ぎて見る気も起きない

573デフォルトの名無しさん2018/02/18(日) 18:40:30.43ID:sS7A8Lf0
ダウンタウンの番組で1番面白かったと思うけど
まあどうでもいいわ

574デフォルトの名無しさん2018/02/18(日) 19:16:47.39ID:PVAcL0Ml
存在すら知らないしダウンタウンそれほど好きでもないから
最初からどうでもいい

575デフォルトの名無しさん2018/02/19(月) 17:20:31.05ID:2R9VMD7m
>>567
泥沼にようこそ

576デフォルトの名無しさん2018/02/20(火) 01:39:34.24ID:XuFZ59kb
>>567
Qt/QMLはデスクトップとモバイルのどちらもまともに動かないから止めた方がいいよ。

577デフォルトの名無しさん2018/02/20(火) 07:23:48.34ID:v/F9ar1Q
>>576
人の言うことを聞かない上の人間の絶対命令でね

578デフォルトの名無しさん2018/02/20(火) 09:04:18.88ID:S6h+U1wA
QMLはスクリプトだからさっと書いて動かせるのがいいところだけど、
やっぱコンパイルしてネイティブコードにしないと実行すると遅いよね。

579デフォルトの名無しさん2018/02/20(火) 10:55:07.26ID:XuFZ59kb
>>578
それでQML Compilerってのがあるけれど商用でしか使えなくしている。

580デフォルトの名無しさん2018/02/20(火) 14:08:49.82ID:m1vPUru+
スクリプトならpyqtが最近便利だね。pythonのguiでは一番使われているんじゃない?

581デフォルトの名無しさん2018/02/21(水) 01:42:27.96ID:v9qdJhXI
>>580
QMLはスクリプトだと言ってもUIしか作れない、
何かちゃんとしようとしたらC++で書かなくてはいけないので、
pyqtの方が格段に優れている。

582デフォルトの名無しさん2018/02/21(水) 05:59:28.40ID:9okxviXz
pyqtは基本widgetじゃないの?

583デフォルトの名無しさん2018/02/21(水) 06:20:39.98ID:9okxviXz
>>579
単独で販売してたらバカ売れしそうだが、結構面倒臭いライセンスなんだよな

584デフォルトの名無しさん2018/02/23(金) 04:44:51.48ID:DZXs8W9s
http://blog.qt.io/blog/2018/02/22/qt-roadmap-2018/

pythonに力を入れるのは意外だな
QtCreatorのpythonサポートはちょっと楽しみ
補完や定義ジャンプはjedi使うんかな?

javascriptの補完って自前でパースしてると思うんだけど今だとtypescriptのtsserver使うという手はないのだろうか

585デフォルトの名無しさん2018/02/23(金) 08:12:44.61ID:k3NzOHVM
PythonによるQtは一時期触ってたんだけど、
結局手続き的にUIを構築していかないといけないから
Qt Creator のuiデザイナーとか使えないし、
逆に不便に感じるんだよな。

新着レスの表示
レスを投稿する