【问题标题】:pass bool to qdialog [closed]将布尔值传递给 qdialog [关闭]
【发布时间】:2023-07-12 21:57:02
【问题描述】:

我正在尝试通过 setter 方法将 bool 传递给 qdialog;代码编译,但该值似乎没有出现在对话框中。我只包含了相关的代码,我希望它是可读的。我在这里错过了什么?

// forcequitDialog h 文件

public:
setAction(const bool &takeaction);

private:
     bool m_action;

// forcequitDialog.cpp

  forcequitDialog::forcequitDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::forcequitDialog)
{
    ui->setupUi(this);  

       if (m_action)
          ui->title->setText("Start Application");
        else
       ui->title->setText("Stop Application");

forcequitDialog::~forcequitDialog()
{
    delete ui;
}



  void forcequitDialog::setAction(const bool &takeaction)
    {
        m_action = takeaction;



    }

// MainWindow.cpp

 forcequitDialog dialog;

    dialog.setAction(true);  // pass value to dialog

    dialog.exec();

【问题讨论】:

  • 注释“不起作用”的代码在哪里?确定不在全球范围内?
  • @krzaq 我已经添加了代码。
  • 粘贴后的代码看起来仍然有些奇怪,但您似乎在构造函数中使用了m_action,然后又调用了setAction(true)
  • @ken-y-n 我的 mainwindow.cpp 通过 dialog.setAction(true);然后调用 dialog.exec() 我不明白有什么问题。
  • @Alan,请不要编辑问题来纠正我们指出的问题,因为这会使以后的读者感到困惑并使 cmets 和答案变得多余。

标签: c++ qt setter qdialog


【解决方案1】:
forcequitDialog dialog; // constructor called here

你的台词:

if (m_action)  // doesn't work
    ui->title->setText("Start Application");
else
    ui->title->setText("Stop Application");

在您调用之前执行:

dialog.setAction(true);  // pass value to dialog

要么将这些指令移动到 setAction() 函数中,要么将 takeaction 传递给您的构造函数。

顺便说一句:对 bool 使用 const 引用是没有用的,它不是一个沉重的对象。

【讨论】: