So-net無料ブログ作成

Qt Creatorでの外部エディタの設定 [NetWalker]

Qt Creator でファイルを外部のエディタで開くことはできないのかなぁ・・?とメニューを眺めていたところ、「Edit」→「Advanced」→「Open in External Editor」と言うメニューから開くことができる様です。

10042700.png
やっぱりありますね


さっそく試してみたところ、viが立ち上がりました・・。

10042701.png
viはちょっと・・


さて、他のエディタに変更できないかと「Tools」→「Options...」でオプション設定のウィンドウを立ち上げてみたところ、ありますね。「External editor」と言う項目です。

10042702.png
ありました


デフォルトでは、viが設定されていますが、色々とオプション項目が設定されています。とりあえずは、geditにしたいと思いますが、起動オプションにはどんなものがあるんでしょうか・・?

Qt Creator 側から得られる情報は、エディタのコマンドを書く欄の横にある「?」のボタンを押して確認したところ、下記の様な感じです。ファイル名、行番号の指定はしたいですね。

10042703.png
ファイル名(%f)と行番号(%l)がほしい


一方、geditのヘルプを見てみたところ、とりあえずファイルの指定は「gedit file1 file2」の様な感じでいいようです。行番号指定は見当たりませんね・・。

10042704.png
ヘルプ


見つからないので、一応「gedit %f -l %l」で設定しておきました。ま、おいおい探しましょう。

10042705.png
行番号指定はてきとう


さっそく、メニューに書かれていたショートカット「Alt+V」を押してみたところ、反応がありません。その横にある「Alt+I」でもそのまま・・。メニューから選択してみましたが、反応なし・・。フルスクリーンを解除して確認したところ、やっぱり立ち上がっていません。それどころか、Qt Creatorに戻ったところ、真っ白に・・。

10042706.png
なんで?


色々触ってみたところ、「Window」→「Show Sidebar」で元に戻りました・・。ショートカットが「Alt+O」ですね・・。「Alt+I」をするつもりが、こっちをしてしまったのかも知れません・・。それにしても全部消えるのもおかしい気もするんですけどねぇ・・。

10042707.png
よかった


それにしてもショートカットが利きません・・。仕方がないので、メニューで実行・・・。あれ?起動しませんね・・。

ためしに端末で試してみたところ…。適当に設定した「-l」オプションが悪さをしていたようです・・。

10042708.png
不明なオプションだそうです


改めて、ヘルプを読んでみたところ、行数指定のオプションは「+」だそうです。「gedit +%l %f」と指定しなおすことで、問題なく行指定ができました。でも、立ち上がりましたが、Qt Creatorで表示されているファイルが開かれますね・・。Projectペインで選択しているファイルを開いてくれるとうれしいんですが・・。まあ、ええか。

後、外部エディタ起動用のキーバインドも変えたい気がしますね・・。


つづく・・・。







 

やっと、ペン動作の捕捉 [NetWalker]

前回、「Qt Creatorのエディタが遅いので、カスタマイズできないか」と書きましたが、メニューの「Tools」→「Options」で設定はできる様です。が、速度を改善できる様な項目は無さげですねぇ・・。とりあえず、「Text Editor」→「Completion」の項目はすべてチェックをはずしましたが、特に改善されていない様です・・。カーソルキーを押しっぱなしにしてると、カーソルキーのキーイベントがたまる様で、鬱陶しいです・・。

それはさておき、やっと追加コードを書いていくことにしましょう。できれば、エディタでの編集はアルゴリズムのみで、関数の追加などはできる限り Qt Creator 上から行いたいんですが、可能なのでしょうか・・?

Objectの欄にある「widget」を右クリックしたところ、該当しそうなメニューは「Change signals/slots...」と「Go to slot...」でしょうか・・。SignalとSlotは編集できるが、他は無理なようですね。まあ、それは仕方がないか・・。

10042000.png
Morphも気になる


両方見てみたところ、「Change signals/slots...」でSlotの追加が可能な様です。継承元のQWidgetのpublicなスロットはデフォルトで表示されている様です。ですが、まずは、protectedなQWidgetのSlotの中からmousePressEvent()を追加してみます。

「Change signals/slots...」で表示された「Signals/Slots of QtlCanvas」のダイアログでSlots側の「+」ボタンを押し、Slot名を入力して「OK」。

10042001.png
publicのものがグレーアウトされているのも気になる


「qtlcanvas.cpp」「qtlcanvs.h」を確認しましたが、特にコードは追加されていませんね・・。何か必要なんでしょうか・・?Qt Designer上でのSignal/Slot関連の説明ページを見てみると、このメニューは、Qt Designer上で追加した要素同士のコネクト用で、マウスのイベントはこのメニューで追加するのはおかしいんですかね・・・。と言うか、マウスのイベント関連はスロットと言うより、単純なイベントハンドラと考えた方が良さげです。そして、イベントハンドラを追加する手段はQt Designer上ではなさそうですね。やっぱり、これは削除しました。

*

仕方がないので、手動で追加していくことにします。まずは、「mousePressEvent()」。・・・エディタ、使いにくいですね・・。遅い上に思い通りに動いてくれません・・。それはさておき、とりあえず、この関数に来ることだけを確認したいので、何か出力したいんですが、標準出力に文字列を出せば、どこかコンソールみたいなところに出てくるんですかね・・。と思って、クラス一覧を眺めていたら、「QDebug」と言うクラスが用意されていました。これを使ってみることにします。

・・・入力してたら、固まりました・・。なんで??ファイルを切り替えて、戻ってきたら動くように・・。何か変なコマンドでも入れたんでしょうか・・?

ともかく、「qtlcanvas.h」に関数を追加し、「qtlcanvas.cpp」に次の行を入力してビルドします。

10042002.png
エディタが使いにくい・・


エラーが出ましたね・・。「invalid use of incomplete type 'struct QDebug'」「forward declaration of 'struct QDebug'」の二つです。

10042003.png
QDebugが使えないらしい


ん~・・。警告はともかくエラーの方はあれですね・・。何かヘッダとかでも読まないいけないんでしょうか・・?色々読んでいたところ、<QDebug>と言うヘッダファイルを読み必要がある様です。「qtlcanvas.h」でそのヘッダを読むようにします。

10042004.png
QDebugを読み込む


で、ビルド。

警告は出ますが、ビルドは通った様です。

10042005.png
引数はまだ使ってません


実行します。

おぉ~!タッチするたびに期待してた文字列が出るようになりました。

10042006.png
楽にデバグできそう


長かったですが、やっとプログラミングし始めるところまで来れましたねぇ・・。


エディタを何とかしたいな・・。つづく。


【参考】
Qt Designer's Signals and Slots Editing Mode
Debugging Techniques





 

Qt Creatorでの独自クラスの追加・・ [NetWalker]

前回の結果から、どうもQtl_Canvasにテキストラベルを貼る時点でおかしくなるような雰囲気です。と言うか、テキストラベルを貼った時点で、ビルド対象になってるのかもしれません・・。前々回の記事で読み飛ばしたドキュメントをちゃんと読むことにしましょう。・・・遠回りしただけですかね。

*

なんか、pluginという仕組みを使って、かなり回りくどそうなやり方が必要なみたいですね・・。ここの手法が私の意図しているものと同じなのかどうかが判断できないんですが、とりあえず習ってみることにします。大回りして、元に戻ってしまうようなことがないといいんですけどねぇ・・。

こちらを読んでいたら、前回出てきた「ui_mainwindow.h」の正体がわかりました。これはuic(User Interface Compiler)で.uiファイル(この場合は「mainwindow.ui」ですね)から生成されたヘッダファイルだそうです。

う~ん、このpluginの仕組みはもっとちゃんとしたカスタムウィジェットの利用に使うような気がしますね。今回、ペンの軌跡を取って、線を描くだけなのでこれは当たらない様な気がしました。そして、目的のクラスはいちいち.uiファイルを作成する必要がない様な気がします・・。

*

再度、仕切り直しです。まず、QWidgetのサブクラスとして、QtlCanvasクラスを作成します。前回、コンテクストメニューから「Add New」で、「Qt Designer Form Class」を作成しましたが、普通に「C++ Class」を選択して作成します。

10041300.png
ベースクラスにQtのクラスが指定出来ます


ベースにQWidgetを指定します。これで、「qtlcanvas.cpp」と「qtlcanvas.h」が生成されました。

続いて、Qt Designer から widget を右クリックで「promote to」で、QtlCanvasを設定します。で、「Promote」。

10041301.png
プロモートします


とりあえず、これでビルドを試します。

エラーが出ましたね。QtlCanvasのコンストラクタがないと怒られています。無事、「qtlcanvas.cpp」もビルド対象に組み込まれてるみたいですね。

10041302.png
まあ、実装してないですからね


コンストラクタくらい自動で作成してくれんのかいなと思ってソースを確認しましたら、作成してくれていました。でも、引数が違います。QWidgetのコンストラクタの引数になっていないんですね・・。まあ、これは仕方がないか・・。

10041303.png
なるほど・・・


「qtlcanvas.h」「qtlcanvas.cpp」の引数を修正して、ビルドしたところ、引数が使われていないとの警告が出ましたが、問題なくビルドは通りました。実行してもOK。

10041304.png
修正


とりあえず、これで、やっとコーディングしていく環境が整いましたねぇ。今回、ソースをちょっとだけ編集したのですが、動作が重いです・・。処理が追い付かず、キーイベントが貯まる様で、ちょっと耐えられないレベルですね・・。処理が追い付かないのならば、カラーリングとかいらないんで、切ることはできないんでしょうか・・?


【参考】
Customizing Qt Designer Forms
Using Custom Widgets with Qt Designer
Creating Custom Widgets for Qt Designer
Using a Designer .ui File in Your Application





 

Qt Creatorでのファイルの削除 [NetWalker]

エラーの原因がよくわからないので、一旦元に戻ることにしました。追加したQtl_Canvas関連のファイルを「Projects」の項目から削除、MainWindowClassのwidgetをQtl_Canvasから「Demote」。前回、これだけじゃあファイルが削除されていなかったので、「ファイル・ブラウザ」で該当ファイルを手動で削除。これで「Build」→「Clean Project」、「Build Project」をしてみましたが、エラーが出てしまいます。「`ui_mainwindow.h'に必要なターゲット`qtl_canvas.h'をmakeするルールがありません」とか・・。

10040600.png
何が残ってんの・・?


う〜ん、まだなんか残ってるんですかねぇ〜。「Rebuild Project」とか「Clean All」とかいろいろ試してみましたが、駄目ですね・・。そもそもこの「ui_mainwindow.h」と言うファイルはQt Creator上に見えていません…。

プロジェクトのディレクトリで「canvas」でgrepをかけたところ、「Makefile.Debug」と言うファイルと「Makefile.Release」と言うファイルに残っているみたいです・・。

10040601.png
残ってますね・・


ファイルを確認したところ、確かに残っている様です・・・。これ、どうやったら消せるんでしょうねぇ・・。

足したファイルを消せないということはないと思うので、何か削除の作業に不備があったんでしょう・・。試しに Qt Creator で「mainwindow.ui」を右クリックして「Remove File...」を選択したところ、出てきたダイアログに「Delete file permanently」と言うチェックボックスがありました・・。これのチェックが必要なのか・・? 前、チェックしてなかったのか・・?

わからないですねぇ・・。

10040602.png
これ?


もう一回、フォームを作成して、Promoteして、その後、削除してみることにします・・。作成して、追加して、念のため、ビルド・・・。

あれっ?なんかエラーが出ないですね・・。よくわからないので、再度Qtl_Canvasの方にテキストラベルを貼り付けます・・。再度、ビルド。

おぉ~、今度は前回と同じエラーが出ました。テキストラベルの貼り付けが問題だったんでしょうか・・。テキストラベルをはがしてみましょう。

同じエラーが出ました。最初はビルドされていなくて、テキストラベルを張り付けることで、プロジェクトのビルド項目に付け加えられたというような感じなんでしょうか・・? どうもファイルの削除がそのままその前の状態に戻るという動作になっていないようですね・・。

今度は、「Delete file permanently」のチェックボックスにチェックを入れて、削除していきます。「ファイル・ブラウザ」で確認すると、Qt Creator上で削除指定したファイルは消えていますが、Projectsの欄に出ていなかった「ui_qtl_canvas.h」が残ってますね・・。

10040603.png
これが残ってしまう・・


仕方がないので、プロジェクトのトップを右クリック「Add Existing Files...」で強制的に「ui_qtl_canvas.h」を追加します。

10040604.png
間違ってる気もしますが・・


で、削除。ファイルが消えました。これで、Clean Project をして、再度ビルド。・・・・エラーが出ます。よく見たら、Objectの画面で、widgetからQtl_CanvasをDemoteするのを忘れてました…。Demoteして、Clean Projectをして、再度ビルド・・・。やっと、元の状態に戻りました。さっきの強制的にプロジェクトに追加する行為は不要かもしれませんね・・。と言うか、たぶん不要。


まったく、進捗してませんが、長くなったので、つづく・・・。






 


ブログを作る(無料) powered by So-netブログ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。

×

この広告は1年以上新しい記事の更新がないブログに表示されております。