【发布时间】: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..survive8 和 born0..born8 是复选框。
在编译时,在 Windows 上没有显示错误,但在 Linux 上出现此错误:
void QAbstractButton::clicked(bool)' 在此上下文中受到保护
connect(born[i], &QCheckBox::clicked, this, &Automate_2D::on_born_i_clicked);
我能做些什么来解决它?我不明白为什么它只出现在 Linux 上。
【问题讨论】:
-
也许您可以创建一个自己的类,例如 MyQAbstractButton(派生自 QAbstractButton)并成为您自己的类的朋友?
-
QAbstractButton::clickedis not protected。我们必须知道更多的上下文。您使用的 Qt 版本可能不是您认为的版本 -
clicked是一个公共信号。见doc.qt.io/archives/qt-4.8/qabstractbutton.html#signals。还有其他东西弄乱了你的代码。 -
与具体问题无关,但可以用
std::array<QCheckBox*, 9>代替QCheckBox* ...[9]。这将使copy_n变得不必要;你可以写survive = _survive;
标签: c++ qt qabstractbutton