2015-01-09

クリック範囲の広いチェックボックス

横幅の広いチェックボックスを配置したとします。

通常、このチェックボックスのクリック可能範囲は、下図の赤で示した部分となります。

配置されたチェックボックス全域をクリックできるようにしたい場合があります。

作り方

1. QCheckBoxを継承したクラスを作成する。

MyCheckBox.h

#ifndef MYCHECKBOX_H
#define MYCHECKBOX_H

#include <QCheckBox>

class MyCheckBox : public QCheckBox
{
    Q_OBJECT
protected:
    bool hitButton(const QPoint &pos) const;
public:
    explicit MyCheckBox(QWidget *parent = 0);
    ~MyCheckBox();
signals:
public slots:
};

#endif // MYCHECKBOX_H

2. hitButton関数をオーバーライドします。

MyCheckBox.cpp

#include "MyCheckBox.h"

MyCheckBox::MyCheckBox(QWidget *parent)
    : QCheckBox(parent)
{
}

MyCheckBox::~MyCheckBox()
{
}

bool MyCheckBox::hitButton(const QPoint &pos) const
{
    return QAbstractButton::hitButton(pos);
}

3. クラスの格上げを行います

デザイナで、チェックボックスを右クリックし、「格上げ先を指定...」を実行します。

  1. 「格上げされたクラス名」に、新しいクラス名を入力します。
  2. 「追加」ボタンを押します。
  3. 「格上げ」ボタンを押します。

4. コンパイルして実行

以上で、QCheckBoxをMyCheckBoxに格上げが完了しましたので、コンパイルして実行します。

チェックボックスの枠内のテキストが無い部分をクリックしても、チェックボックスが反応するようになります。