通过QLIST迭代并在包含对象上调用函数

Iterating through QList and calling functions on contained objects

本文关键字:对象 调用 函数 包含 QLIST 迭代 通过      更新时间:2023-10-16

我在QLIST上迭代并调用包含对象的成员函数遇到麻烦。我试图禁用此窗口中的所有按钮。

这是我的代码

void TicTacToe::disableGame(){
    QList<QPushButton *> allPButtons = findChildren<QPushButton *>();
    QList<QPushButton *>::iterator i;
    for (i = allPButtons.begin(); i != allPButtons.end(); ++i)
        allPButtons[i]->setEnabled(false);
}

但不会编译。那么如何正确使用iterator

迭代器的点是,迭代时不再需要列表(或其他容器对象)。您只需要一个迭代器,即知道如何浏览其内容,以及一个知道它应该停止的迭代器。

您在这里拥有的东西是您有一个指针的迭代器,因此您必须在迭代器上调用operator*(),然后在指针上拨打*(或->以使您的生活更轻松)。

因此您需要使用

(*i)->setEnabled(false);

您还可以查看QT的foreach宏,或使用基于循环的范围。它们使您的代码更加清洁,更清晰。