у меня есть 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();
}
}
Я использую 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
там. Из-за этого вы должны получить ошибку компиляции.
я сделал ошибку, потому что в заявлении подключения я использовал Qwidgetitem, а не qtreewidgetitem