投稿

12月, 2018の投稿を表示しています

Qtでのカスタムウィジェットの作り方

イメージ
Qtには便利なウィジェットが数多く用意されているが、それぞれに適した機能のみが実装されている 描画についてはQt Style Sheetsによって、強力なカスタマイズが可能だが 対応しているプロパティは限定的であり、動的な変更に向かない、また対象環境を考慮しづらいのが欠点である 対象環境を考慮しづらいというのは例えば、QLabelの背景色に白を想定し、枠線色をスタイルシートで黒に設定するとしよう これがもしユーザーのテーマの背景色が黒だった場合に色が同化し枠線の意味をなくしてしまう これを防ぐために背景色をスタイルシートで白に固定させると今度は文字色が被り、文字色を黒に設定する必要が・・・となってしまう 左から想定、テーマが黒、背景色を白指定 しかし、カスタムクラス化し描画やイベント時の動作を書き加えることで、より広範囲にカスタマイズすることが可能だ 例としてQSliderをカスタムクラス化し、文字を表示できるよう順を追って説明していく まず通常が画像のようになっているがこれに文字を追加するにはQSliderのカスタムクラスを作成する //ヘッダ class CustomSlider : public QSlider { Q_OBJECT public: explicit CustomSlider(QWidget *parent = nullptr); explicit CustomSlider(Qt::Orientation orientation, QWidget *parent = nullptr); protected: void paintEvent(QPaintEvent *e) //描画を行う }; //ソース CustomSlider::CustomSlider(QWidget *parent) : QSlider(parent) { } CustomSlider::CustomSlider(Qt::Orientation orientation, QWidget *parent) : QSlider(parent) { setOrientation(orientation); } CustomSlider:paintEvent(QPaintEvent *e) { QS