有什么不同?我有使按钮同时被选中和按下(按下)的代码。在同一个按钮上分别完成这些操作后,我没有发现任何区别。视觉效果是相同的(在窗口上变为蓝色,并在单击鼠标后保持不变)。

另外,我还有另一个关于检查按钮的问题。假设我有一个按钮,此刻它不在group1中(已被注释掉),并且已连接到SLOT,这使其被按下。在同一窗口中有一个文本区域,因此当我按下按钮时,它的名称更改为“已选中”,并且为蓝色。因此,当我将光标放在文本区域中键入内容时,它仍然是蓝色的,已选中。但是,如果我再次单击它,它将变为“未选中”,但仍然是蓝色。但是,如果这样做之后,我再次在文本区域中键入了某些内容,则该按钮为白色,而不是向下,并且仍为“未选中”。

因此,我得出的结论是,您只需单击按钮即可更改按钮的状态,甚至无需在代码中使用setChecked(true / false)?

但是接下来又是另一回事。如果我在代码中用group1取消注释了这两行,并在组中添加了button1,我突然失去了通过单击鼠标来选中/取消选中按钮的功能。它始终保持“检查”状态,我想更改它的唯一方法是通过代码。为什么会这样?

   Window5::Window5(QWidget * parent) :QWidget(parent)
  {
    QPushButton * button1=new QPushButton("button1",this);
    connect(button1, SIGNAL(clicked()), this, SLOT(make_pushed()));

    //QButtonGroup * group1=new QButtonGroup(); //currently not in the group
  // group1->addButton(button1);

    QLineEdit * line_area=new QLineEdit(this);
    line_area->setGeometry(500,500,70,20);
    button1->setCheckable(true);
   }

void Window5::make_pushed()
   {


QObject* sender = QObject::sender();
QPushButton* button = qobject_cast<QPushButton*>(sender);
button->setDown(true);

if (button->isChecked())
{
    button->setText("checked");
}
else
{
    button->setText("unchecked");
}


}

最佳答案

isDown()和isChecked()之间的区别如下。当用户单击按钮进行检查时,首先按下该按钮,然后释放到检查状态。

当用户再次单击它(以取消选中它)时,该按钮首先移至按下状态,然后移至未选中状态(isChecked()和isDown()均为false)。

有关official Qt documentation of QAbstractButton的更多详细信息。

09-11 17:21