【Win/Mac/Linux/Android/iOS】 Qt 総合スレ 18©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
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/ >>50
C++のままでうまくやっていればgnome<kdeだっただろう。
QMLなんかにするからUnity8とKDE5はしょぼくて役立たずになってしまった。 LINEのデスクトップ版でQtが使われているという記述を見たんだけどマジ? >>53
qtのdllインストールするからマジだと思うよ >>55
むしろC/C++の文字列処理が頭おかしいくらい何も考えてないのであって、
Qt上でQStringとQByteArrayを使うだけならノーストレスで何も考えずに使えるよ。
QString <-> std::string/std::u16string
QString <-> const char*
の相互変換については基本的にQString側のメソッドを呼び出せばいいが、
C++特有のインスタンスの寿命問題があるので気を使う必要があるな。 >>53
かなり頑張ってよく作ってある。
だけど、Qt自体の問題でテキスト入力のキー操作がブラウザなど他のアプリと同じようではないのでとても使いにくいし、
日本語入力中に文節区切りがわかるように表示されないので入力がしにくい。
そんなだからChromeからLINE使った方が格段に使いやすい。 >>56
楽なんだけれどUTF-16の並びでしかないから絵文字などがあると面倒なコード書かなくちゃならない。
Qt5.10のQStringViewで使いやすくなるように思えない。
https://doc-snapshots.qt.io/qt5-dev/qstringview.html >>58
そんな特殊な環境知らんわ。
機能が足りないなら自分で実装してフォーラムに投げればいいんじゃね。 なるほどね。サロゲートペアが含まれると、QString::length()の言うところの
戻り値は文字の数ですよ、という前提が崩れるわけか。
文字の数にこだわるならtoUcs4()やtoStdU32String()で他の形式に変換する必要があるわな。
ここはもういっそQChar を UTF-16からUcs4に変えてしまったほうが全体的に楽になりそうなものだが、
現状では頑なに内部16ビットを固守してるようにみえる。
まあ頑張れ。 今話題のAnimeEffectsってのがQt製みたいね >>61
動かしてみた。Qtで作ってこんな情けないUIというのはあんまりだ。 >>62
どうせゴチャゴチャしてりゃ偉いと思ってるだけだろ 君の言う、まともなUIって定義はなんだ?
そもそもKDE自体がQtで作られてるわけだが。 >>65
Linuxで動いているKDEはKDE4まではよくできている。他のプラットフォームがひどい。
AnimeEffectsは、
QGroupBoxのタイトルテキストが枠にくっついて隙間がなかったり、枠に重なってしまっている。
QPushButtonがプラットフォームスタイルでない。
フォーカス枠が細く正しい太さでない。
QComboBoxの大きさが小さすぎて正しくない、テキスト上下位置もずれている。
ヘルプで表示されるダイアログのクローズボタンをクリックしてもクローズされない。OKはクローズされる。
タイムラインゲージのテキストが欠けたりハンドルとテキストが重なっていたりする。 >>65
>まともなUIって定義はなんだ?
動作しているプラットフォームで、そのプラットフォームネイティブなUIと同じ見栄えと同じ操作感で違和感なく動作すること。
以前はよかったが最近のQtはそれがだめになっている。QMLになってさらにだめでQMLでデスクトップアプリケーションは作る気にならない。 QMLは、あくまでもJavaScriptの柔軟性でUIデザインと応答の同時作り込みをやりたいというのが主眼で、
OSのルックアンドフィールを遵守するという目的ではないと思う。
どちらかというとスマフォやタブレット対応で必要になりそうな技術。
それとQt5.6でアプリを公開してるけどネイティブ実装と違って困った、なんてことはまだ一度もない。
ただしQtがネイティブOSで何をやってるかソースコードを読んで全部理解しながら作る必要がある。 >>66
最後二つはまだしも他のはただのお前の好みだろ
ボタンがネイティブスタイルじゃないと駄目って
UIデザイナもスタイルシートも全否定だな ここには低年収の頭の弱いおっさんしかいないからしゃーない >>68 QMLは、あくまでもJavaScriptの柔軟性でUIデザインと応答の同時作り込みをやりたいというのが主眼で、
UIデザインもUnity8とKDE5で失敗している。
応答はだめ、Qt Quick Controls 1がほとんどQMLで実装して応答がダメでC++で実装しなおされて2になった。
さらに1でのデスクトップ対応より格段の劣化。
>>どちらかというとスマフォやタブレット対応で必要になりそうな技術。
両方で失敗をし続けている。Ubuntu Phoneなど失敗続き。
>>ネイティブ実装と違って困った、なんてことはまだ一度もない。
困らない程度の実装なんだろう。 >>72
あくまでアプリで適用できるレベルの技術であって、
デスクトップ環境そのものをQMLに置き換えるのは流石に無茶が過ぎるだろう。
MSだってVisual StudioをWPFに置き換えるのに発表後10年ぐらいかかったわけだし。
>困らない程度の実装なんだろう。
正確にはQtの標準実装で正常に動かないことを確認した段階でWin32APIに
処理を差し替えて解決してるから困ってないと書いている。
普通の開発者なら困ってるかもわからんな。
具体的に言うと
ファイル名のソート、ウィンドウのStayOnTop、ゴミ箱に削除、
タイトルバーのコンテキストメニューにメニュー追加、指定したファイルをExplorerで表示する、あたりかな。
Qtを使うことで大半のコードはOS非依存にできるんだが、この辺になるとOSごとに書かないとしょうがないみたいだ。 QMLで何かを作ろうと思ったら
いろんな常識を捨てる覚悟と、ややこしい設計の覚悟が必要だな。
しかもビルドが通っても期待通りに動かないことだらけ。
代案探しの方が時間がかかる。 >>※正確には通常「LGPL+商用利用向きの例外条項」を選ぶことにな7ります(Qtインストール先の「LGPL_EXCEPTION.txt」を参照)。
LGPLv3だからLGPL_EXCEPTION.txtは削除されるべきだとメーリングリストに書かれている。 新しいGoogle EarthはQtをやめてChromeベースになった。 Google Earthだと、Chrome Book向けにウェブベースのものを作らないとしょうがないだろうし、当然の結末だろうなあ。
Chromeで作っておけば作り分けも要らなくなるわけだし。
今はもうWebkit+JavaScriptでテキストエディタやIDEが作られる時代だからね。 VisualStudioCode >>> QtCreator >>80
やればわかるが、node-webkitやelectronはUIセットがないから、
ツールキットに相当するものを自分で作らないといけないぞ。
それ自体が大変すぎて個人にはとても扱えない代物だと感じたな。 補足すると、
VisualStudioCodeはMicrosoft、
BracketsはAdobe、
AtomはGitHubと、どこもIT業界の大手ばかりなことがわかる。
膨大な開発コストを費やさないと使いものにならないということだ。
逆にアプリ本体がほぼウェブブラウザで済むような内容だと比較的小さなコストでアプリが作れる。
だがそういうアプリもQtで作れることは言うまでもない。 デバッグ中にブレークポイント貼るとデバッガがおかしくなる >>83
Qt Creatorはいろいろバグがあってはまる。 >>82
Qtで作るよりもプラットフォームに用意されているツールで作った方がちゃんと動くものを作りやすいのが現実だ。 >>85
それは狭い了見だな。
少なくとも俺が作ってるOpenGLで画面を描画して各種画像の読み込みに
対応して読み込みの先読み機構を付けた
ウィンドウズアプリを作るには、素で作るより遥かに楽だ。 >>86
大したことをしていないのだろう。その先をしようとするかどうかだ。 >>87
たかがGUI Toolkitに何を求めているのだお前はw エラー: : No such file or directory
#include <QLoggingCategory>
となってしまいます。
公式サイトからダウンロードしてインストールしたのに
QLoggingCategoryがないとなるのは何故でしょうか?
皆様はQLoggingCategoryを別途追加されていますか
それともQtを再インストールしたほうがよいでしょうか まず、なにをしたらそのエラーが出たのかを書かないと すっかり失念しておりました
新しいプロジェクトとしてproファイルを読み込み、
ビルドしようとしたところ
cppファイルが
エラー: : No such file or directory
#include <QLoggingCategory>
となってしまいビルドできないのです
原因と考えているのはオプション→Qtバージョンで
使いたいと考えているQt5.6.2 gcc_64以外に
自動検出のQt4のお化けがあり何をしても消えてくれず
(削除、クリーンアップ不可)
再インストールしても解決せず途方に暮れている状態です まず動作OSを書いてくれ。
Ubuntu16.04.2 で動かしたときは、apt-getで入るQtは使い物にならんかったよ。
公式からインストーラーを落として入れたらツールキットごと入ったからそれでビルドしていた。
そのときapt-getで入った古いバージョンのQtが毎回認識されてたが
インストーラーで入れた方を使う形で設定し直してたな。 基本的には[ツール]-[オプション]でダイアログを出して、
[ビルドと実行]-[Qtバージョン]でQtツールキットのバージョンの一覧を出して優先順位を決めたりする。
x64とx86は別バージョン扱いになる。 skypeforlinux-64はQtを使わなくなった。 皆様ありがとうございます。
>>93-94
全く同じ状況です。
優先順位をどのように設定されましたか?
[ビルドと実行]-[Qtバージョン]でQtツールキットのバージョンの一覧で
自動検出のQt4
Qt5.6.2 gcc_64
になっており、削除、クリーンアップができません。
手動で追加することもできません。
何か別途で優先順位を設定する方法があるのでしょうか
どうして古い方のQmakeを優先するんですかね… >>97
だからOSとそのバージョンを書けって言ってるだろ。
質問の仕方もわからんのか。
まず、Linux系の場合、OS標準の方法で入れたQt Creatorと
Qt公式のインストーラーで入れたQt Creatorはそれ自体が挙動が違うから、
Qt公式のを使いたければOS標準のはアンインスコして使うべき。
それからQt Creatorのツールキットの認識は『キット』と『Qtバージョン』の2段階になっていて、
Qt公式のQt Creatorを起動している場合はバンドルされているツールキットが自動検出になるはず。
まずはQt Creatorのバージョンを確認することだな。うちのはQt公式ので4.2.1だ。 ubuntu16なんだろよく読めよ
責任とれないが俺のやり方
rootでいらないqtファイル消す(パージじゃ消えない>>99を信じるな)
aptでパージ
新バージョンを公式から落としてインスト
aptでいれなおす
aptでいれたクリエイターを起動
あら不思議自動認識が消える
手動で公式インストqtファイルを指定
いつもこんな感じ
93に指定する方法聞くかos入れ直すほうがいいかもな
しかし>>99のような役立たずな書き込みもめずらしい 皆様ありがとうございました。
>>100
この方法で自動検出されていたQt4が消え、
Qt5.6.2 gcc_64だけを指定することができ、
エラー: : No such file or directory
#include <QLoggingCategory> が無くなりました。
ありがとうございました。 >>100-101
なんでだよ。
その運用だとQt Creatorだけシステム側ので全体がチグハグになるだろ。
SDKをQt公式から入れたならQt CreatorもQt公式のを使うのが本道だろ。
ま、動きゃ何でもいいってんならもう何も言わんがね。 何コイツ偉そうと思っていたら
> うちのはQt公式ので4.2.1だ。
最後でお茶吹いたw >>105
Qt CreatorのバージョンはQt SDKのバージョンとは違うんだが?
いちいちそんなことを説明する必要ある? apt-get で入れる場合、そのubuntu(debian)でランタイム用として公式サポートされているものと
同じバージョンの開発キットがインストールされる
さらにapt-get でインストールできるのはモジュール単位なので、
QtGUI とかの基本以外のモジュールを使う場合は追加でインストールする必要がある
ぶっちゃけ面倒だし、Qt公式インストーラで別途インストールした方が管理も楽
ちなみにユーザー権限でインストールするとホームディレクトリにインストールされる
sudo 付けてインストーラを実行すればそのPC内のユーザーで共用できる(/opt/Qt とか) Qt Creatorのヘルプでスクロールすると途中から逆向きにスクロール、なんてバグだ。 >>108
ソース引っ張ってきて直した。Qtのバグだった。 >>110
公式にパッチを投げるまでがOSS開発者の仕事。 >>106
>>107
相変わらず的外れなことばっかりな奴がいるな >>112
Qt自体がOSSだ。
>>113
何が的外れか具体的に指摘できない時点で的外れ。 >>113
Tipsに対して的外れとは、君の的はいったいどこにあるのやら 101です。
荒れる原因になってしまったので
追加の報告をさせて頂きます。
100さんの方法で自動検出が消え、Qt5.6.2 gcc_64を指定したあとは、
公式のQt5.6.2を利用しています。
公式のQt5.6.2にもQt5.6.2 gcc_64を指定した設定が適用されていました。
(自動検出のQt4を消すことが出来ました。)
ですので、102さんが仰る
>>Qt Creatorだけシステム側ので全体がチグハグ
にはなっていないと思います。
この報告をすぐにすればよかったですね >>116
まあUbuntuなら公式とそれほど差があるわけじゃないから
動けばどっちでもいいだろうけどさ。
念のためにGUI上でQt Creatorのバージョンを確認して、
$ (QtSDKをインスコしたPATH)/Tools/QtCreator/bin/qtcreator -version
の出力と比べてご覧よ。
同じなら同じバージョン。
異なるならQt Creatorだけシステム側のを使ってる状態になる。 >>118
https://www.sra.co.jp/qt/faq/licenses.html
問 :
商用版の Qt にあって、オープンソース版の Qt にないものは何ですか。
答 :
基本的な Qt のコードとライブラリと API は、両方で同じです。しかしながら、商用版とオープンソース版では多くの違いがあります。
商用版の顧客は、オープンソース版のユーザが利用できない多くの製品やサービスを入手できます。
>>118,110 は明らかにQtのコードの話をしているからこれはOSSの範囲だ。 >>119
商用はQtのコードを変更しても知らせずに使える。OSSに反映する必要はない。
製品に特化した機能変更や修正をしてもよいしQtを使っていることを知らせる必要もない。 >>121
あー、こいつ全くわかっとらんわ。話にならん。 >>122
LICENSE AGREEMENTをよく読んでごらん。 >>123
117のカキコ見たらわかるが
人の話全く聞かない奴だからスルー推奨 数日前、Qt Creator4.2.2でオプション設定していたら固まった。
今日は、起動して7つのプロジェクトが入ったデフォルトセッションを開くとプロジェクトの読込中のまま進まない。 プロジェクト読み込み時に固まるってのはたまにあるね。
しばらく待ってたら読み込み終わることが多いけど。
userファイル消してみたらどうだい。
ついでにいうとここで書いたって解決しないから
どうしてもというなら公式のフォーラムで発言したほうがいいよ。 おまえらQtでmastodonのクライアント作ろうぜ >>126
そうだね。
今度はビルドしたらQt CreatorのプロセスがCPU 100%で無限ループ。 Python3 + PyQt5 の勉強始めて、基本的な動作の実験をしてみたんだけど、
if __name__=="__main__":
# 1回め
app = QApplication(sys.argv)
window = MainWindow()
app.exec_()
# 2回め
app = QApplication(sys.argv) # これをしなければ OK
window = MainWindow()
app.exec_()
ってやると1回めのウィンドウを閉じたところで Segmentation fault になる。
MainWindow は、QMainWindow から派生してて、コンストラクタで show() してる。
2回めの QApplication のインスタンスを作りなおさなければ動くんですが、なぜなんでしょう?
想定しているのは、入力のフロントエンドとして使用して、その処理を繰り返すような用途です。 >>129
基本的にQApplicationはQtアプリ自身の寿命と同じになる。
QApplication::exec()から制御が戻ってきたときはそのままアプリケーションは終了させてしまう。
君が書いてるようなQApplicationのインスタンスを何度も作り直すようなことは想定されてない。
根本的に使い方が間違ってると思うんだが。 >>130
どうも。
まあ MainWindow を再生成してる例とかも見たことないし、
あまり良いことじゃないんだろうなーと思いながらちょっと実験をした次第。
スレッドを使うのが正しいんだろうとは思うんだけど、なかなか大変そうで、
できれば簡単に済ませられないかと。
1. ウィンドウで入力。
2. ウィンドウ閉じて、途中経過はターミナルにつらつらと出す。
3. 1 に戻る。
こんな感じなんだけど、簡単にできる方法ないでしょうかね。 そんなことだれもやらないだろうな
MainWindowの中身を造りなおせば済むから メインウィンドウを閉じるという事は、アプリ・プロセスの終了と同じ
プロセスの起動・終了を繰り返しても、時間がかかるだけで、意味がない >>131
どうしても閉じたいのなら、closeした時のsignalで処理開始して、処理終了signalでメインウインドウ再度作成すればいいんやないの? pythonにもhide/showぐらいはありそうなもんだが hideするだけで良いじゃん。
多分GUIアプリを作った事がないと見た。 >>131
app.setQuitOnLastWindowClosed(False) どうも。いろいろ参考になります。
ちょっと気合入れてスレッド勉強しました。なんとなくわかってきたんで、これで実装しようかと思ってます。あー、頭いて。
>>136
Python + Qt は初めて。Lazarus なら遊びで使ったことがある。
>>137
なにやら怪しげなフラグ設定、調べてみます。 >>138
python で実装するにしても関数仕様は以下を参照した方が速い。どうやっても C の仕様に引き摺られるので。
http://doc.qt.io/
例えば >>137 を調べるとして、以下を見れば古い C 流儀のプロパティだと判って python 流でないのに戸惑うかもしれない。
http://doc.qt.io/qt-5/qguiapplication.html#quitOnLastWindowClosed-prop
ただ、>>131 をやろうと思ってるなら閉じる必要のあるウィンドウをメインウィンドウにするべきではないと思うな。入力用のダイアログ作ればいいと思うけど。
逆にずっと出していると思われるターミナルウィンドウみたいなのをメインにしたらいいと思う。
そうすると余程長い処理じゃなければスレッドを使う必要もなくなるんじゃない?
PyQt/PySide でスレッドを分けるとスレッドを跨いだデータの扱いで結構面倒事が起こる。 質問です
QChartを使いたいんですけどQtCreatorのデザイナに出てこないんですがどうすればいいんでしょうか
環境はUbuntuでCreatorと全モジュール入りのソースをビルドしてインストールしました 質問。QMLでfindObjectByIdに相当するものって無い?
idをJavaScriptに文字列で渡ししたいんだが >>141
chart使ったことはないが公式のサンプルはあるじゃろ
そこから読み解くのも一つの手
>>142
C++でも存在は知ってても使ったことがない
Qt3より以前の古い設計の名残だと思ってるが… QStringListやQMap<int, QString>でよくね Qt は Unix 系の人が多いと思うけど、 Unix 系の人はお気に入りのニュースリーダかエディタで 2ch を見る人が多い印象がある。 専ブラを作るのに適したGUIライブラリってなんだろ
Qtはマルチメディアも扱いやすいしWebKitも軽いし最も適した選択肢の1つに入る気がする
それともWPFやJavaFXのほうが良かったりするのかね
デスクトップ版の専ブラ古臭いのしかないしQt/Qmlでデスクトップ/Android両対応の専ブラ作れば一発当てられるんじゃね ■ このスレッドは過去ログ倉庫に格納されています