mousePressEvent не связывается правильно? - PullRequest
0 голосов
/ 09 ноября 2010

Чтобы ознакомиться с графическим представлением Qt, я реализую простую шахматную доску в Qt.На данный момент нет шахматных фигур.

Я использую прямоугольники для представления каждой плитки, поэтому я создал класс BoardTile (который наследуется от QGraphicsRectItem), чтобы я мог определить mousePressEvent.

Вот небольшой тестовый код, который я связал с щелчком мыши:

void BoardTile::mousePressEvent(QGraphicsSceneMouseEvent *event) {
    QMessageBox mesg;
    std::stringstream mesgText;
    mesgText << "Clicked tile (" << this->row_id << ", " << this->col_id << ").";
    mesg.setText(QString::fromStdString(mesgText.str()));
    mesg.exec();
}

Когда я щелкаю первую плитку во втором ряду, я получаю следующее сообщение:

Щелчок по плитке (1, 0)

Затем, когда я щелкаю по любой другой плитке, я получаю точно такое же сообщение.Содержание сообщения зависит от того, какую плитку я щелкнул первым.Почему это?Неправильно ли я связал mousePressEvent?

Полный код http://www.box.net/shared/4m6nrvuxa4 (обновление 1)

Обновление 2: Я заметил, что если я поставлю event->ignore(); после mesg.exec(), он работает нормально.Я знаю, что это не решение (потому что оно, вероятно, приведет к разного рода странному поведению), но я хочу знать, почему это работает.Раскрывает ли это что-нибудь решающее в любых возможных ошибках, которые я допустил в своей реализации?

Обновление 3 : Кто-то сказал мне, что я должен попробовать изменить mousePressEvent на mouseReleaseEvent.Как ни странно, это работает.Насколько я знаю, единственное различие между этими двумя событиями заключается в том, что первое срабатывает при нажатии кнопки мыши, а второе - при отпускании этой кнопки.Так почему mouseReleaseEvent вызывает желаемое поведение, а mousePressEvent нет?

1 Ответ

3 голосов
/ 09 ноября 2010

Когда вы делаете this->x_id, вы получаете положение X RECT, а не щелчок мышью.Вы должны сделать event->::pos() взяты из события.Документы здесь .

...