【问题标题】:QCheckBox->isChecked() issueQCheckBox->isChecked() 问题
【发布时间】:2012-12-30 08:34:33
【问题描述】:

选中复选框后,以下代码不起作用。无论复选框是否被选中,都会跳转到“else”语句。

   void MainWindow::runButtonClicked()

        {
            if (MainWindow::betAllRed->isChecked()==true){
                red.didBet=true;
                qDebug()<<"bet Red true";
            } else{
                qDebug()<<"red not checked";
            }
        }

这里有什么明显的问题还是其他地方有问题? 是否需要连接插槽才能获得检查状态?

【问题讨论】:

  • 看起来错误的是您访问betAllRed 成员的方式。如果您需要消除歧义,只需使用 betAllRed-&gt;(不带限定符)或 this-&gt;betAllRed 会更常见。
  • @Mat 没有错,只是多余的。该语法可用于访问特定命名空间/范围内的标识符,在本例中为 MainWindow::,无论如何都会使用该标识符。 (编辑:但我想你知道这一点,现在我重新阅读了你在评论中写的内容,但无论如何都要澄清这一点。)
  • 您是否使用 Designer 创建 GUI?

标签: c++ qt qcheckbox


【解决方案1】:

问题在于您访问 betAllRed 复选框的方式。 如果您使用的是设计器,则可以使用 Ui 访问它;

if(ui->betAllRed->isChecked())

如果您使用自己的代码:

QComboBox *betAllRed = new QComboBox(this);

只需使用以下方式访问它:

if(this->betAllRed->isChecked())

【讨论】:

    【解决方案2】:

    我怀疑你做错的是,你实际上有两个betAllRed 字段:你已经创建并初始化了QCheckBox* MainWindow::betAllRed,然后你在 MainWindow::ui 中还有一个复选框(如果你在 Designer 中重命名,否则使用 Designer 创建的默认名称)。

    如果是这种情况,请删除您自己的 betAllRed,然后修复代码以使用 ui-&gt;betAllRed 访问复选框(如果现在有默认名称,可能在 Designer 中重命名复选框)。

    然后是关于你的这一行的编码风格说明:

    if (MainWindow::betAllRed->isChecked()==true){
    

    那一行就等于这个,会更短更清晰:

    if (betAllRed->isChecked()) {
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-26
      • 2014-09-11
      • 2016-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多