Qt 4.6 - C ++ - QTreeWidgetItem Iterator - PullRequest
1 голос
/ 11 января 2010

У меня есть QTreeWidget с элементами в нем. Первый столбец содержит уникальный номер. Это устанавливается через item-> setData (0, 0, unique_number) ;. Второй столбец содержит флажок, установленный через item-> setCheckState (1, Qt :: Unchecked) ;. Пользователь может выбрать элементы, с которыми он хотел бы работать, и нажать кнопку. Слот для этой кнопки запускает цикл на отмеченных пунктах. В документации Qt приведен пример. Вы используете QTreeWidgetItemIterator.

QTreeWidgetItemIterator it(treeWidget);
 while (*it) {
     if ((*it)->text(0) == itemText)
         (*it)->setSelected(true);
     ++it;
 }

Это также говорит о том, что вы можете указать аргумент в конструкторе, чтобы перебирать только проверенные элементы. Флаг: QTreeWidgetItemIterator :: Проверен. Мой слегка настроенный цикл выглядит следующим образом:

QTreeWidgetItemIterator it(treeWidget, QTreeWidgetItemIterator::Checked);

while (*it)
{
    QVariant w;
    w = (*it)->data(0, 0);
    std::cout << "Selected item # " << w.toInt() << "\n";
    it++;

}

Этот код прекрасно скомпилируется, но не будет работать, когда вы действительно запустите программу. Он не печатает никаких значений.

Есть советы? Спасибо!

Ответы [ 3 ]

1 голос
/ 11 января 2010

Спасибо, Ронил!

Другой способ сделать это - вот так (я только что понял).

QTreeWidgetItemIterator it(ui->treeWidget);

while (*it)
{

    if ((*it)->checkState(1) == 2)
    {
        QVariant w;
        w = (*it)->data(4, 0);
        std::cout << "Selected item # " << w.toString().toStdString() << "\n";
    }

    ++it;

}

checkState принимает аргумент столбца int, а == 2 позволяет обрабатывать только проверенные элементы.

1 голос
/ 12 января 2010

Только одно ... Я думаю, что это нехорошая привычка сравнивать enum с int, так как enum "int value" может измениться ... Сравните вместо этого с Qt::Checked ... Это просто "наверняка" и много более чистый для чтения

1 голос
/ 11 января 2010

Единственное предупреждение, отсутствующее в документации Qt, заключается в том, что флаг QTreeWidgetItemIterator :: Checked проверяет только состояние проверки для столбца 0 в каждом из ваших QTreeWidgetItems. Использование столбца 0 для вашего флажка и столбца 1 для вашего уникального номера должно привести к тому, что цикл будет печатать значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...