質問は非常に簡単です。チェック可能なQGroupBoxオブジェクトのデフォルトの動作を変更することは可能ですか?チェック可能なQGroupBox内に多くのQLineEditオブジェクトを含むユーザーインターフェイスを設計しました。望ましい動作は、QGroupBoxがチェックされていない場合、すべての子が有効になり、チェックされている場合、すべての子が無効になることです。
公式のQGroupBoxドキュメントでわかるように、次のように書かれています。
チェックボックスをオンにすると、グループボックスの子が有効になります。それ以外の場合、子は無効になり、ユーザーはアクセスできなくなります。
1つのトリックは、チェックされたときにチェックが表示されないように、またはその逆になるようにペイントを変更することです。
#include <QtWidgets>
class GroupBox: public QGroupBox{
public:
using QGroupBox::QGroupBox;
protected:
void paintEvent(QPaintEvent *){
QStylePainter paint(this);
QStyleOptionGroupBox option;
initStyleOption(&option);
if(isCheckable()){
option.state &= ~(isChecked() ? QStyle::State_On : QStyle::State_Off);
option.state |= (isChecked() ? QStyle::State_Off : QStyle::State_On);
}
paint.drawComplexControl(QStyle::CC_GroupBox, option);
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
GroupBox groupBox;
groupBox.setCheckable(true);
QVBoxLayout *vbox = new QVBoxLayout;
vbox->addWidget(new QLineEdit);
vbox->addWidget(new QLineEdit);
vbox->addWidget(new QLineEdit);
vbox->addStretch(1);
groupBox.setLayout(vbox);
groupBox.show();
return a.exec();
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加