2

我有一个带有复选框的项目的 QListWidget,我想遍历所有项目并将它们标记为选中,我试过这个:

void ScaperDialog::CheckAll(void) {
    dbg_prnt << "inside " << __func__ <<std::endl;
    QListWidget *list = parentWidget()->findChild<QListWidget *>();
    if (!list)
        std::cerr << "No QListWidget found" << std::endl;

    QList<QListWidgetItem *> items = list->findChildren<QListWidgetItem *>();
    QList<QListWidgetItem *>::iterator i;
    for (i = items.begin();i != items.end(); i++) {
        dbg_prnt << (*i)->text.ToString() << std::endl;
    }
}

但得到一个编译器错误: 错误:'i.QList::iterator::operator*()->QListWidgetItem::text' 没有类类型 dbg_prnt << (*i)->text.ToString() << std::endl; ,这显然只是打印每个元素,要标记它,我会做(*i)->setChecked(true);而不是打印它,但我认为这会给我同样的错误。

我如何让这个滚动?

4

1 回答 1

2

QListWidgetItemare not QObjects 所以你不能通过findChildren()方法访问,你应该使用的是count()anditem()方法QListWidget

void ScaperDialog::CheckAll(void) {
    dbg_prnt << "inside " << __func__ <<std::endl;
    QListWidget *list = parentWidget()->findChild<QListWidget *>();
    if (!list)
        std::cerr << "No QListWidget found" << std::endl;

    for(int i=0; i < list->count(); ++i){
        QListWidgetItem *it = list->item(i);
        dbg_prnt << it->text().toStdString() << std::endl;
        it->setFlags(it->flags() | Qt::ItemIsUserCheckable);
        it->setCheckState(Qt::Checked);
    }
}
于 2019-07-22T02:54:57.013 回答