以棘手的方式禁用QCheckbox

时间:2011-12-17 02:22:10

标签: c++ qt qt4 checkbox

我想创建一个名为“Show Captions”的QCheckBox,在第一个选中时禁用另一个名为“如果没有标题时显示标题”的QCheckBox,但我的问题是当用户检查第一个复选框时我怎么能立即禁用它

SetupSlideShow::SetupSlideShow(QWidget* parent)
    : QScrollArea(parent), d(new SetupSlideShowPriv)
{
    QWidget* panel = new QWidget(viewport());
    setWidget(panel);
    setWidgetResizable(true);

    QVBoxLayout* layout = new QVBoxLayout(panel);

    d->showComment = new QCheckBox(i18n("Show captions"), panel);
    d->showComment->setWhatsThis( i18n("Show the image caption at the bottom of the screen."));

    d->showTitle = new QGroupBox(i18n("Show title"), panel);
    d->showTitle->setWhatsThis( i18n("Show the image title at the bottom of the screen."));
    d->showTitle->setCheckable(true);

    d->showCapIfNoTitle = new QCheckBox(i18n("Show captions if no title"), panel);
    d->showCapIfNoTitle->setWhatsThis( i18n("Show the image caption at the bottom of the screen if no titles existed."));
    QVBoxLayout *vbox = new QVBoxLayout;
    vbox->addWidget(d->showCapIfNoTitle);
    d->showTitle->setLayout(vbox);
    layout->addWidget(d->showLabels);
    layout->addWidget(d->showComment);
    layout->addWidget(d->showTitle);
}

2 个答案:

答案 0 :(得分:3)

这不起作用吗?

  

connect(d-> showComment,SIGNAL(toggled(bool)),d-> showCapIfNoTitle,SLOT(setDisabled(bool)));

答案 1 :(得分:1)

paintEvent()的调用对于即时性并没有真正为你做任何事情。在控件返回事件循环之后(在构造函数退出之后),不会重新绘制任何内容。调用update()更为典型,但在更改内置小部件的属性时,这是不必要的。

要关联复选框,请为stateChanged() showComment信号定义一个插槽,将信号连接到上方构造函数中的插槽(通过调用connect(),并在该插槽中,拨打d->showCapIfNoTitle->setCheckState(d->showComment->checkState())