this-> geometry и другие функции размера, возвращающие размер окна, а не размер виджета.- Qt - PullRequest
1 голос
/ 29 августа 2011

У меня есть виджет (который наследует QWidget), который, когда пользователь нажимает на него, он может перетащить его в любое место на экране. Я реализовал mouseMoveEvent () и setMouseTracking () false для этого виджета. Это код,

void Piece::mouseMoveEvent(QMouseEvent *event)
{
    if(event->buttons() == Qt::LeftButton && this->geometry().contains(event->pos()))
    {
    x = event->x()-18;
    y = event->y()-18;
    update();
    }
}

Проблема в том, что (после использования отладчика) я обнаружил, что geometry () дает размеры окна (400x400), а не размеры виджета (36x36). Я также пробовал другие функции, которые возвращали QRects, и я пробовал функцию underMouse (), но каждый прямоугольник имеет размер 400x400, а функция underMouse () всегда возвращает true, даже если мышь не находится над изображением виджета.

У меня есть представление о том, в чем может быть проблема, которая может быть неправильной. Приложение содержит шахматную доску из квадратов, каждый из которых является объектом в части QGridLayout. Чтобы нарисовать виджет на этой сетке (игровой элемент), я просто сделал,

layout->addWidget(pawn[0], 1, 1, 8, 8);

Таким образом, другими словами, виджет можно разместить в любом месте экрана (сетка содержит 8 строк и столбцов). Если это проблема, как я могу отобразить этот виджет в верхней части макета сетки? Я попытался просто добавить виджет в родительский виджет, тот же родительский виджет, который является родительским для QGridLayout (и я обязательно установил родительский в конструкторе), но это не сработало. Если это вызывает проблему, то как я могу это исправить? Если нет, то в чем причина проблемы?

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