【问题标题】:'void QAbstractButton::clicked(bool)' is protected'void QAbstractButton::clicked(bool)' 受保护
【发布时间】:2018-06-13 19:45:20
【问题描述】:

我实际上正在使用 Qt 5.10.1 开发一个项目。我使用的是 Linux,而我的合作伙伴使用的是 Windows。

我们已经编写了这段代码:

QCheckBox* _survive[9] = {
        ui->survive0, ui->survive1, ui->survive2, ui->survive3,
        ui->survive4, ui->survive5, ui->survive6, ui->survive7, ui->survive8
    };
QCheckBox* _born[9] = {
        ui->born0, ui->born1, ui->born2, ui->born3,
        ui->born4, ui->born5, ui->born6, ui->born7, ui->born8
    };
    std::copy_n(_survive, 9, survive); // because arrays are not directly assignable
    std::copy_n(_born, 9, born);


for (int i = 0; i < 9; i++) {
        connect(born[i], &QCheckBox::clicked, this, &Automate_2D::on_born_i_clicked);
        connect(survive[i], &QCheckBox::clicked, this, &Automate_2D::on_survive_i_clicked);
    }

survive0..survive8born0..born8 是复选框。

在编译时,在 Windows 上没有显示错误,但在 Linux 上出现此错误:

void QAbstractButton::clicked(bool)' 在此上下文中受到保护

connect(born[i], &QCheckBox::clicked, this, &Automate_2D::on_born_i_clicked);

我能做些什么来解决它?我不明白为什么它只出现在 Linux 上。

【问题讨论】:

  • 也许您可以创建一个自己的类,例如 MyQAbstractButton(派生自 QAbstractButton)并成为您自己的类的朋友?
  • QAbstractButton::clicked is not protected。我们必须知道更多的上下文。您使用的 Qt 版本可能不是您认为的版本
  • clicked 是一个公共信号。见doc.qt.io/archives/qt-4.8/qabstractbutton.html#signals。还有其他东西弄乱了你的代码。
  • 与具体问题无关,但可以用std::array&lt;QCheckBox*, 9&gt;代替QCheckBox* ...[9]。这将使copy_n 变得不必要;你可以写survive = _survive;

标签: c++ qt qabstractbutton


【解决方案1】:

如果它可以帮助某人,我找到了解决方案。 在 QT 中,我进入了“项目”窗口(在左侧),然后在

Projetct > Desktop QT 5.11.0 GCC 64Bit > 构建

我刚刚使用刚刚创建的新文件更改了编译的文件路径,该文件为空。

然后我尝试再次编译我的项目,它成功了!

(感谢您的帮助)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 2022-08-23
    • 2016-02-19
    • 2014-03-05
    • 2015-09-05
    • 1970-01-01
    相关资源
    最近更新 更多