Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

Вопрос [QT] Нормальное перемещение окна.

  • Автор темы Автор темы SQL
  • Дата начала Дата начала
Эксперт
Эксперт
Статус
Оффлайн
Регистрация
9 Апр 2020
Сообщения
1,480
Реакции
680
Есть окно, обрамление отключено, нашел пару функций, которые перемещают окно за любое место, НО мышку по уебанский срывает если попытаться переместить за какой-либо виджет, может у кого завалялся код нормального перемещения...
Вот код уебанского перемещения:

C++:
Expand Collapse Copy
void FWindow::mousePressEvent(QMouseEvent* event)
{
    if (event->button() == Qt::LeftButton) {
        m_mousePoint = event->pos();
        event->accept();
    }
}

void FWindow::mouseMoveEvent(QMouseEvent* event)
{
    const QPointF delta = event->pos() - m_mousePoint;
    move(x() + delta.x(), y() + delta.y());

    event->accept();
}
 
Все решил.
Если кому надо...

C++:
Expand Collapse Copy
#include <QtWidgets/QWidget>
#include <QMouseEvent>
#include <QCursor>

private:
    Ui::FWindow *ui;
    QPointF old_pos;
    bool state = false;

    virtual void mousePressEvent(QMouseEvent* event);
    virtual void mouseMoveEvent(QMouseEvent* event);
    virtual void mouseReleaseEvent(QMouseEvent* event);
C++:
Expand Collapse Copy
void FWindow::mousePressEvent(QMouseEvent* event)
{
    if (event->button() == Qt::LeftButton) {

        int x = this -> geometry().x();
        int y = this -> geometry().y();

        int cursor_x = QCursor:: pos().x();
        int cursor_y = QCursor:: pos().y();

        if (x <= cursor_x <= x + this -> geometry().width())
        {
            if(y <= cursor_y <= y + this -> geometry().height())
            {
                this -> old_pos = event->pos();
                this -> state = true;
            }

            else
            {
                this -> state = false;
            }
        }

    }

    if (event->button() == Qt::RightButton) {this -> state = false;}
}

void FWindow::mouseReleaseEvent(QMouseEvent* event)
{
    if (event->button() == Qt::LeftButton) {this -> state = false;}
}


void FWindow::mouseMoveEvent(QMouseEvent* event)
{
    if(this -> state == false) {return;}

    const QPointF delta = event -> pos() - this -> old_pos;
    move(x() + delta.x(), y() + delta.y());
    //move(this -> pos() + delta);
}
 
Назад
Сверху Снизу