【问题标题】:Detecting if state of any widget in a form has changed检测表单中任何小部件的状态是否已更改
【发布时间】:2014-05-28 15:38:57
【问题描述】:

我目前有一个带有 QStackedWidget 的表单。 QStackedWidget 里面有多个小部件。例如 QLineEdit 、 QCheckBox 、 QLineEdit。现在我有一个“保存”按钮,只有在任何小部件的状态发生变化时才应启用该按钮,否则它将保持禁用状态。我知道我可以转到每个单独的小部件并进行适当的更改以启用/禁用保存按钮。我想知道完成这项任务的最快和最简单的方法是什么?

【问题讨论】:

  • “小部件更改状态”是什么意思?
  • 如果在其中输入文本,我指的是 QLineEdit 的更改。对于 QSlider,如果它的值被改变或来回移动。如果 QCheckBox 的值被切换,则用于 QCheckBox。

标签: c++ qt


【解决方案1】:

制作自定义小部件。使用该自定义小部件扩展所有输入。

现在您可以使用信号或保存状态变量。

只要有变化就发出信号。传递此信号以保存按钮状态槽。

开始时它可能看起来很长,但稍后会加快您的工作速度。如果您有基于 UI 的设计,还可以尝试推广课程。所以自定义小部件在任何情况下都不会成为问题。

【讨论】:

    【解决方案2】:

    您可以将与某些状态更改相关的小部件的信号连接到插槽以启用保存按钮:

    connect(ui->lineEdit,SIGNAL(textChanged(QString)),this,SLOT(enableSaveButton()));
    connect(ui->horizontalSlider,SIGNAL(valueChanged(int)),this,SLOT(enableSaveButton()));
    connect(ui->checkBox,SIGNAL(toggled(bool)),this,SLOT(enableSaveButton()));
    
    void MyWidget::enableSaveButton()
    {
        ui->saveButton->setEnabled(true);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-21
      • 1970-01-01
      • 2020-03-07
      • 1970-01-01
      • 2017-02-17
      • 1970-01-01
      • 2019-10-06
      相关资源
      最近更新 更多