проверить, установлен ли флажок qtreewidgetitem

у меня есть qtreewidget с проверяемым элементом, я могу проверить и снять флажок элемента, я хочу проверить, если элемент отмечен или нет, я использую connect но мой slot не вызывается, я добавляю точку останова в свой слот, но никогда не достигаю ее,
я подключаюсь так:

 connect(_events, SIGNAL(itemClicked(QTreeWidgetItem*,int)), this, SLOT(eventChecked(QWidgetItem*,int)));
connect(_player, SIGNAL(itemChanged(QTreeWidgetItem*,int)), this, SLOT(playerChecked(QWidgetItem*,int)));

я использовал itemClicked и itemChanged, но мои слоты никогда не вызывались, мой слот:

    playerChecked(QTreeWidgetItem *item, int i)
{
if(item->checkState(i) == Qt::Checked) {
std::cout << "reached here" << std::endl;
} else {
operators->printAllowedPlayers();
}
}

1

Решение

Я использую Connect, но мой слот не вызывается, я добавляю точку останова в свой слот, но никогда не достигаю ее

Есть несколько вещей, которые можно сделать в таких случаях, чтобы определить проблему:

  • Проверьте вывод консоли, чтобы увидеть, есть ли какие-либо жалобы.

  • Посмотрите, называется ли оператор connect.

  • Проверьте возвращаемое значение оператора connect, установлено ли соединение успешно.

В этом особом случае проблема заключается в сопоставлении параметров, поскольку у вас есть это для оператора connect:

SLOT(playerChecked(QWidgetItem*,int))

тогда как у вас есть это объявление слота:

playerChecked(QTreeWidgetItem *item, int i)

Вы можете увидеть смесь QWidgetItem а также QTreeWidgetItem, Это, вероятно, относится к eventChecked слот тоже. Вам необходимо сопоставить их, возможно, передав QTreeWidgetItem * в слот, тем более что это то, что содержит сигнал, к которому он подключен. Это было бы решением, соответственно:

 connect(_events, SIGNAL(itemClicked(QTreeWidgetItem*,int)), this, SLOT(eventChecked(QTreeWidgetItem*,int)));
connect(_player, SIGNAL(itemChanged(QTreeWidgetItem*,int)), this, SLOT(playerChecked(QTreeWidgetItem*,int)));

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

Кроме того, ваше определение слота не содержит возвращаемого значения. Вам нужно будет добавить void там. Из-за этого вы должны получить ошибку компиляции.

0

Другие решения

я сделал ошибку, потому что в заявлении подключения я использовал Qwidgetitem, а не qtreewidgetitem

0

По вопросам рекламы [email protected]