c++ - isDown() 与 isChecked() 的区别

标签 c++ qt

有什么区别?我有代码使按钮既选中又按下(按下)。在同一个按钮上分别完成这些事情后,我没有注意到有什么不同。视觉效果是一样的(在windows上变成蓝色,松开鼠标后就这样)。

此外,我还有一个关于检查按钮的问题。假设我有一个按钮,目前它不在 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 的更多详细信息.

关于c++ - isDown() 与 isChecked() 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36815824/

相关文章:

如果调用 vector ,C++ vector 段错误会导致崩溃

c++ - 为什么我的 C++ 类不能使用 Qt?

c++ - 如何将函数传递给函数?

c++ - Ubuntu 将可执行文件识别为共享库,并且不会通过单击来运行它

python - PyQT - 定位和显示自定义小部件

c++ - 在 Windows 上重建 hhvm

c++ - C++、C++/CX 和 C++/WinRT 之间有什么区别?

c++ - 如果传递空范围,vector::erase() 返回什么迭代器?

c++ - 从 C++ 调用 Delphi DLL 函数

c++ - 二进制搜索数学函数