【Win/Mac/Linux/Android/iOS】 Qt 総合スレ 19
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 総合スレ 18
http://mevius.5ch.net/test/read.cgi/tech/1488948543/ class myClass : public QObject{
Q_OBJECT
private:
QThread* th;
public:
myClass();
virtual ~myClass(){}
pulic slots:
void fin();
signals:
void thread_quit();
};
myClass():th(new QThead()){
connect(
this,
&myClass::thread_quit,
th,
[&]{ th->quit(); th->wait(); delete th; }
);
moveToThread(th);
// other initializations
th->start();
}
void myClass::fin(){
moveToThread(th->thread());
emit thread_quit();
} >>121
Qt6はPerl6と同じ運命を辿るという予言ですね?
で、Qt5がforkして新たなQt史が始まるのです・・・ Qt6でもwidgetは追加なしなんでしょ。Javascript風やるくらいならReact行くわ 実際組み込みにライバルが出てきたら
この体たらくでは終わるかもなQt >>131
数年前にクロスプラットフォーム下でwxWidgetsを試したけど、
環境の差異を自前で解決する必要があるっぽかった。(CMakeとか?)
Qtはqmakeがあって楽。 >>132
えっ、CMakeってめんどいの?
QtはqmakeからCMakeに移行するらしいのだが・・・ Perl6を検索したら
じんめんちょうとケモミミメガネっ娘イラストが出て来たでござる 新しく勉強する人はQt4用と古くなってしまったが、オライリーの本でいいの? もうすぐQt6が出るんでさすがに4の本はやめといたほうがいい マルチプラットホームでゴニョゴニョやる人はFlutterに流れた? Qtだからって必ずマルチで動かさなくてはならないということも無いんじゃね?
オレはMFCより使いやすそうだからQt使ってるだけだし・・・ 初期KDEに感動してQtカッコいいと思っているが動機かな。
LinuxとかはQtアプリがメインになればいいのに、と思っていますが、思っているだけです。 PyQt5スレで質問したが過疎化しているみたいなのでこちらでよろしく。
ラズパイでPyQt5にてソフトを作っていますが、ラズパイごと販売する場合、ソースリストがPythonなんでソース公開になりますが、これでも商業利用だとライセンス違反になりますか? >>142
GPL版のpyqt使ってるなら自分の派生コードもGPLにしないと駄目というだけて、商用非商用関係ないんじゃないの >>143
ありがとうございます。
自分のもGPLにするので大丈夫ですね。
販促品なので良かったです。 Qtのツールキットってどうやって作ればいいの?
WindowsのQtからラズパイをLANでつないでクロスコンパイルして、デバッグまでしたいのだけどどうやって検索すればいいのかすらわからない・・・
と言うか、ラズパイだとVisual StudioからC#で作った方が楽なんだろうか・・・ >>145
ラズパイでARM版Windows動かすという話? そのままググればいくらでも出てきそうだけど
無理しなくてもセルフコンパイルでできるんじゃない? >>145
「Qtのツールキットを作る」
という言葉の意味がいまいち分からない。
Qt自体がツールキットなのだが、それにさらに何かをかぶせた
独自ツールキットを作るという意味か?
>WindowsのQtからラズパイをLANでつないで
これも、Qtはライブラリであって完成したプログラムではないので
それにLANを繋ぐということも意味が分からない。 >>146>>149
ツールキットって
プロジェクト作る時に
mingWIN64かVisualStudio2017か選べるようにするじゃん
そのキットのこと
なんかウインドウズ上でもラズパイ用のキットが作れそうだと思ったの >>150
ツールキットって言ってもなにか特別なことをしているわけではなく、ライブラリと設定の集まりだから
1.クロスコンパイラをインストール
2.Qtの依存しているライブラリをクロスコンパイル
3.Qtをクロスコンパイル
4.Qt Createrのオプションメニューでコンパイラやライブラリパスを指定してユーザーカスタムツールキットを作成
でいける。2.が死ぬほどめんどいからお勧めはできない。特にWindowsでは。 二人ともありがと
なんか難しそうだなぁ
vcpkgも難しそう
cmakeとかやったこと無いよ・・ >>153
素直にセルフコンパイルしたほうがいいよ。Qtわりかしクロスプラットフォーム性あるんだしWindows使いたければ普段Windowsで開発して必要に応じてラズパイにソース移せばいい。
環境依存する部分あるから無理っていうなら、そもそもそんなもんクロスコンパイル出来ないでしょ。多分 QtってC++とQMLってあるけど
みんなどっちでやってるの? どなたか御教授おねがいします。いろいろググってもそれらしい記事にヒットしませんでした。
QtでFrameなどのウィジェットを書き換え→印刷→書き換え→印刷....と連続で行うことは可能ですか?
QtでSQLiteのフロントエンドを作ってカード型データベースを作ろうと思っているのですが、
検索結果10件のレコードがヒットして、1レコード1枚の印刷をしたい場合は如何したもんかと悩んでいます。
よろしくお願いします。
ちなみにPyQtです。 >>157
普通に検索結果Listに入れてループ回してQFrame変更と印刷繰り返すだけやないの? >>158
ありがとうございます。
QPrintDialogをループ前に呼んでループ回すごとにQPrinterクラスに描画&印刷って感じですか? QMAKE_INCDIR_OPENGL,EGL が /usr/include/libdrm になるのがムカツク
うざけんな 直リンは無いけどアーカイブ上に存在する
Qt5.12.10のオフラインインストーラは使ってもいいんだよね?
(ちなみに、LANケーブル引っこ抜いてオフライン状態にしたら、
未登録でもインストール出来てしまう...まあ、オフラインインストーラなんだから
あたりまえかもしれないが) 個人で商用ライセンス買ってる人いるのかな?
年間5万ちょいだが。 >>162
直リンあるぞ
ダウンロードサイトから薄ーい色で書いてあるOfflineのところからクリックするとそのページに行く 何かうちの会社がやるとき一人年間6000ドルとか言われて
急いで決めなきゃいけないのに稟議面倒くさくて結局止めちゃったのに今そんな金額なのかよ >>164
ほんとだ!いつの間にか直リン出来てるわ
以前は無かったんだけど、サイト更新前だったのかなぁ・・・ 5.15.3は以前のアナウンスの通り商用オンリーになってしまったな
もしやQt5.15にもフォークの嵐が!? 重い腰あげてQMLやるわ
UIが綺麗だもんしょうがないね QMLってロジック部分もQMLなの?
なんか解説サイトは入門しか無くていまいち理解出来ん 俺もまだ入門読んでる段階だから分からん
けど複雑な部分はJavaScriptで書くらしい 実質JavaScript/cssみたいな感じじゃないか 此方はコア機能はc++で書いてjsはguiの味付け程度にしてる ファイル入出力とかはC++でUIがQMLロジックのほとんどはJS
最近慣れてきてやっとQtQuick悪くないと思えてきた 知らん
qt quickならMaterialテーマとかが使えるから、そのためにQMLの入門ブログ一通り読んだけど
調べたところPythonからでもMaterialテーマ(に近いもの)は使えるみたい(qt-material)
つまるところ徒労だったわけだが、折角QMLを学んだので使ってみようと思う
ちなみにQMLで良いなと思ったのは、親要素の高さと幅に対するパーセンテージで子要素のジオメトリが指定できるところかな 体性
>パーセンテージで指定できる
正確にはJSで「parent.width * 0.8」とか書く mousePressEventでevent.x()とevent.y()の座標からWidegetのgeometry()の範囲の場合はWidget上でタッチしたと処理をしていました。
WidgetをTabとかGroupに置いたらgeometry()は、親Widgetからの相対位置になりましが、MainWindowの座標値からにするにはどうしたら良いのでしょうか? >>180
QWidget::mapTo() メソッドで変換すればええと思うよ
例えば、2枚の QFrame をスタックして、上に重なっている frame_2 の左上の
位置を MainWindow のクライアント座標に変換するには
QPoint point = ui->frame_2->mapTo(this, QPoint(0, 0));
で求まる
もし、MainWindow のフレームも含めた位置が欲しい場合は(通常必要ないと思うが)、
フレームの幅 = geometry().topLeft().x() - x()
フレームの高さ(タイトルバーの高さを含む) = geometry().topLeft().y() - y()
を先ほどの point.x(), point.y() にそれぞれ足せばいい >>181
■ 追記
元々は centralwidget が親だったのだろうから、
this (MainWindow) じゃなくて ui->centralwidget の方が正しいかもしれない >>181
ありがとうございます。
C++じゃなくてpythonでどう書けば良いのかわかりません。
PyQt5とraspberry piなんです。 tabの上にgroup置いて、そこにwidget置いたから順番にmapToやるんですね? >>186
Python 知らないから PyQt5 については何とも言えないけど、
順番にたどる必要はないと思うよ
要は、groupBox の上に乗せたせいで geometry の基準が変わってしまったから、
mapTo で centralwidget 基準に変えてあげる感じかなぁ
俺自身も勉強中なんでうまく説明できませんがw
あとは試行錯誤してね >>187
何とか出来ました。
通常は最大化して、MainWindowの(0,0)位置と画面(0,0)は一致しているけどdebug時はWindow表示なので以下の方法にしました。
# MainWindowの(0,0)の物理座標
main = self.mapToGlobal(QPoint(0,0))
#widgetのgeometory(widthとheightが欲しいだけ)
geo = self.ui.widget.geometry()
# widgetの(0,0)の物理座標
widget = self.ui.widget.mapToGlobal(QPoint(0,0))
# MainWindowとwidgetの相対位置を求める
px = widget.x() - main.x()
py = widget.y() - main.y()
if (event.x() > px) & (event.x() < px + geo.width()) & (event.y() > py) & (event.y() < py + geo.height()):
widgetをタッチした処理
QLcdNumberをクリックしたら数値入力のダイアログが出るようにしたかっただけです。 flutterで組み込みとかqt余裕ぶっこいてて大丈夫なの? >>188
今更だけど、QLcdNumber をサブクラス化して自前で clicked シグナルを
実装すれば行けるんちゃう?
mousePressEvent と mouseReleaseEvent を使うんやで >>191
オープンソースの情報共有は大事やけ、サンプル作ってみたわ
C++ だけど参考にしてな
(ただ、改行数に制限があるから小出しにするで)
まず、マウスの左ボタンを押したときの処理や
void CClickableLCDNumber::mousePressEvent(QMouseEvent *e)
{
QLCDNumber::mousePressEvent(e);
if (e->button() == Qt::LeftButton && rect().contains(e->pos())) {
m_leftButtonDown = true;
}
}
マウスボタンが押された判定だから、一見領域判定必要ない気もするけど、
先に右ボタンを押したままの状態にすると、領域外で左ボタンを押した際に
mousePressEvent が呼ばれてしまうから、一応領域判定を入れてみたで おお、インデントが無くなってしまう...まあいいか
次に、マウスの左ボタンを離したときの処理や
void CClickableLCDNumber::mouseReleaseEvent(QMouseEvent *e)
{
QLCDNumber::mouseReleaseEvent(e);
if (m_leftButtonDown && e->button() == Qt::LeftButton) {
m_leftButtonDown = false;
if (rect().contains(e->pos())) {
emit clicked();
}
}
}
領域内でマウスの左ボタンを離すと clicked シグナルを発生させるで 最後に、マウスの左ボタンを押している最中にアプリケーションが
非アクティブになった場合の処理や
void CClickableLCDNumber::guiApplication_applicationStateChanged(Qt::ApplicationState state)
{
if (state == Qt::ApplicationInactive) {
m_leftButtonDown = false;
}
}
コンストラクタ上に次の 1 行を記述して上記のスロットに接続してな
connect(qApp, &QGuiApplication::applicationStateChanged, this, &CClickableLCDNumber::guiApplication_applicationStateChanged);
なぜ必要かというと、非アクティブになった際に mouseReleaseEvent が
発生しないからや
だから、アプリケーションが非アクティブになったことを検知したら、
強制的に m_leftButtonDown フラグを false にしているんや
もしかして、間違っているところがあるかもしれないから、
ちゃんと動作確認しておくれ
ほな、またな 全然スレが進まないから、経験した不具合でも書き留めておくか
パスが深い状態でビルドしたら、エラーも出ずに無限ループ状態になったわ
ご参考までに もしQtのオープンソース版が無くなったら、
やっぱりGTKに避難します?
今なら.NET 5.0 C#+GTKかなぁ
GTKって依存関係が複雑らしいですが・・・ .Net5.0(年末には6.0になるけど)かな
C#なら慣れてるし やっぱりそうですよね
うちの会社超貧乏なんで(つうかケチw)
オープンソースの開発ソフトを使ってるんです
あとで試してみますわ いや、俺ならってだけだよ
今やってる組込Linuxだと、メモリがとストレージがギリギリしかないからQtの無料版で頑張ってるし(CPUも.Netを駆動するほどパワーない)
ただ、メモリもストレージもあるんだったらQt嫌いだから.Netってだけで、 素のC++使うこと考えたらQtって結構いいと思いますが、
まあ、ひとそれぞれですから
(ただ、Qtってランタイムのサイズが大き過ぎるのが気になりますけどね)
C#使ってみて気に入らなかったらQt使える間はQtで
次はgtkmmにするかも・・・C+GTKは流石にキツイので KDEからQt5PatchCollectionが出るぅぅぅ〜 遂に Qt5.12.11 からオフラインインストール出来なくなってしもたか・・・
これからは、GTK みたいに MSYS2 使ってインストールするのが主流になるのかな?
それともみんな自前でビルドしてるん? MFCに似てるといわれてたからwxWidgetsは今まで使わなかったけど、
実際使ってみたら以外に使い易かったわ
Qtのライセンスが今後どう転ぶか分からないから、
選択肢を増やしておいたほうがいいよね MouseAreaとMultiPointTouchAreaを重ねて、タップしたときに両方のonPressedを発生させるみたいなことって出来ないんですかね?
イベントを処理した上で、更に親クラスにも伝えたいんですが Qt始めようと思ったのになんでこんな過疎ってるの? Qtが出た時程は話題もないから。
KDE が Windows11ぽいから、頑張ってみてもいいと思うよ。 あのライセンス形態では多分衰退していくわ
昔と違ってマルチプラットフォーム環境は他にも選択肢増えてるわけだし 無料版の制限が厳しいよね
オープンソースにしてQt側に何かメリットあったんだろうか >>202
それはPyQtもそうなるのですか?
ラズパイで使っているので心配。 昔はQtのクロスプラットフォームという謳い文句に夢があったね 使い道によらないか?
Java よりいいと思うが。 LinuxのGUIアプリ作りたいんだって
C++出来るから手伝えって言われたけど
別の仕事で忙しいから断った なんかQtのblogしばらく更新されとらんな
ライセンス買う人が思いのほか少なくてヤル気無くしたんか? 世界的に同じ価格だとどんどん貧乏になってる日本にとってはかなり高いライセンス料になってるんだけどそのへん日本法人はなんとかしようと思わんのかね そのうち地球温暖化で人間が住めなくなるのと、食糧難がくるので、日本人の給料が気になる奴は農地を買って、農業始めとけ。
金があっても食料が買えるとは限らん。