Перемещение QWidget C++

210
17 января 2018, 17:13

Создал QWidget с именем WPunktDialog в QMainWidget. Интересует вопрос, как заставить QWidget двигатся при нажатии на него и перемещения мышки, т.е как обычное окно?

Answer 1

Через метод QWidget::move

У метода такая сигнатура:

void move(int x, int y)
void move(const QPoint &)

Пример:

QWidget w;
w.show();
w.move(100, 100);

Чтобы для двигать виджеты мышкой нужно переопределить события mousePressEvent и mouseMoveEvent:

class Widget: public QWidget
{
    Q_OBJECT
    public:
        explicit Widget(QWidget *parent=0) : QWidget(parent) {
        }
    protected:
        void mousePressEvent(QMouseEvent *event)
        {
            if (event->button() == Qt::LeftButton) {
                oldPos = event->pos();
            }
        }
        void mouseMoveEvent(QMouseEvent *event)
        {
            QPoint delta = event->pos() - oldPos;
            move(pos() + delta);
        }
    private:
        QPoint oldPos;
};

Честно говоря, у меня рядом Qt/Qt Creator не было, поэтому изначально код на питоне писал, а после переписывал на с++, поэтому проверить его возможности не было, но должно работать.

READ ALSO
Проект Qt собирается, но не запускается

Проект Qt собирается, но не запускается

Собрал проект Qt, но при попытке запуска из Qt Creator в консоли сборки следующие сообщения:

189
Получить размер текстуры в памяти

Получить размер текстуры в памяти

Загружаю текстуру функцией:

241
Проверка вложений в файлах MS Office

Проверка вложений в файлах MS Office

Есть сервер, на который могут загружаться файлы MS Word и MS ExcelКак, используя java, убедиться, что они не содержат вложения в виде exe-файлов, jar-ников...

210