キートップを表示して、押されたキーを判断するようにする
キーボードの外観だけで、なんのキーなのかさっぱり分からないのでキートップを表示するようにしました。
QPainter::drawText()には表示する長方形領域(QRect)、文字列(QString)を渡して、ついでに真ん中に表示してねとパラメータで指定すればQRectの真ん中に文字列を表示してくれる関数があるのでそれを利用します。
指定するQRectはキーボードを描画するときに使ったQRectがそのまま利用できますので、キートップに表示する文字列だけを用意すれば良さそうです。
ついでにソフトウェア・ボタンも用意しました。テストのためにすべてのボタンを表示するようにしていますが、KeroRemote のように、必要なボタンのみが表示されるように制御する予定です。
上向きカーソルキーの左のキーは円マーク(¥)でなくバックスラッシュ(\)を表示させたいですね。
Ubuntu でビルド、実行するとこんな感じです。
マウスでクリックしたり、タッチパネルでタッチするとイベントが発生します。このイベント情報からクリックした場所(x,y)がQPointの形で取得できるのでこれを使ってどのキーが指定されたのかを地道に判断します。
ここでもキーボードの描画に使ったQRectが使えますね。クリックした場所がどのキーの領域に入っているかを判断すればよさそうです。
Qt Assistantを起動してQRectに使えそうなメンバー関数がないか調べてみるとcontains()というメンバー関数が使えそうです。
bool QRect::contains(const QPoint &point, bool proper=false)
エッジを領域外としたい場合はproperを明示的にtrueで指定すれば良いそうです。
これを利用して各キーの領域を調べることにします。1つ1つ地道にキー表示領域を調べるので最大、キーの個数回も領域チェックしてしまいますが、まぁ大きな問題はないかと…(*^-^)
背景色、文字色、フォント、背景の属性、リサイズした場合の表示計算の方法など検討すべきところはまだまだ沢山ありそうです…
« キーレイアウト用のデータが出来上がりました | トップページ | 微調整をする »
コメント