Russian Qt Forum

Qt => Вопросы новичков => Тема начата: RoulanD от Марта 09, 2013, 22:52



Название: Форма через QtQuick и её элементы
Отправлено: RoulanD от Марта 09, 2013, 22:52
Доброго времени суток.

Есть проект Qt с формой на QtQuick.
Код:
ui = new QDeclarativeView;
ui->setSource(QUrl("qrc:/MainUi.qml"));
setCentralWidget(ui);

Там же установлен флаг
Код:
setWindowFlags(Qt::FramelessWindowHint);
который убирает внешние элементы стандартной формы.

Необходимо создать эти элементы формы используя Qml и C++.

Конкретно требуется:
1. Кнопка "Свернуть".
2. Кнопки "Развернуть" и "Восстановить".
3. Drag and drop формы.
4. Интерактивное изменение размеров формы. (Стрелочки при подведении курсора мыши к краям формы).

Предполагаемое решение:
1. Вроде ничего сложного, делаем Rect, по нажатию вызываем соответствующий invocable метод. Можно ли это сделать каким то еще способом? Имеется ввиду способ по проще.
2. Та же самая ситуация, кнопки, invoikable функции с showMaximized и showNormal (Можно так же запоминать размер окна при разворачивании и возвращаться к нему при восстановлении). Вопрос аналогичный, можно ли это сделать проще?
3. Видел давно статью об этом, но к сожалению утерял. Подскажите как это реализовать, или подкиньте линк на хороший материал.
4. Так же не знаю как это реализовать. Только догадки использования mouseEvent. Но нужно больше информации по этому поводу.

Прошу просмотреть написанной мной и отписать ваши мнения по этому поводу.
Спасибо за будущие ответы.


Название: Re: Форма через QtQuick и её элементы
Отправлено: twp от Марта 10, 2013, 19:31
По первым двум пунктам - врядли можно проще сделать. Только не понятно зачем запоминать размер окна при разворачивании и возвращаться к нему при восстановлении, если это стандартное поведение для окна. Обычно сохраняется состояние окна при его закрытии и восстановление при открытии. По третьему пункту - что значит Drag and drop формы? Куда она должна дропаться? По четвертому пункту - изменение размеров должно быть доступно без каких-либо дополнительных усилий. Неужели не работает?


Название: Re: Форма через QtQuick и её элементы
Отправлено: RoulanD от Марта 11, 2013, 09:14
По первым двум пунктам - врядли можно проще сделать. Только не понятно зачем запоминать размер окна при разворачивании и возвращаться к нему при восстановлении, если это стандартное поведение для окна. Обычно сохраняется состояние окна при его закрытии и восстановление при открытии. По третьему пункту - что значит Drag and drop формы? Куда она должна дропаться? По четвертому пункту - изменение размеров должно быть доступно без каких-либо дополнительных усилий. Неужели не работает?

Напоминаю, что я использую флаг
Код:
setWindowFlags(Qt::FramelessWindowHint);
которые убирает все визуальные элементы стандартной формы. Это значит что при запуске приложения у меня будет обычный Rect из QML файла, без кнопок управления окном (свернуть, закрыть и т.д.), без обрамления формы за которое собственно и можно её "ресайзить" мышкой, без заголовка за который её можно перемещать по экрану как обычное окно. От сюда и возникли эти вопросы.

По поводу запоминания размеров окна: это просто юзабилити, чтобы когда пользователь восстанавливал окно, то есть переходил из состояния развернутого окна в нормальное состояние, ему возвращалось то окно (имеется ввиду размер) с которого он переходил в состояние развернутого окна. Немного запутанно ну да ладно =)

Под Drag and drop'ом подразумевал просто перемещение окна по дисплею.

Итог: 1 и 2 вопросы отпадают. 3 и 4 остаются до сих пор не закрытыми.

Жду еще ответов.
Спасибо.


Название: Re: Форма через QtQuick и её элементы
Отправлено: twp от Марта 11, 2013, 19:37
надо включить отслеживание перемещения мыши в QDeclarativeView
Код
C++ (Qt)
ui->setMouseTracking(true);
 
а также переопределить события
Код
C++ (Qt)
void QWidget::mousePressEvent ( QMouseEvent * event )
void QWidget::mouseMoveEvent ( QMouseEvent * event )
void QWidget::mouseReleaseEvent ( QMouseEvent * event )
 
подробнее можно поискать на этом форуме, эта тема не раз подымалась.
Для старта ресайза нужно ловить QHoverEvent


Название: Re: Форма через QtQuick и её элементы
Отправлено: RoulanD от Марта 11, 2013, 22:23
С "ресайзом" все ясно.

Как быть с "перетаскиванием" окна по рабочему столу. Как я понял действия аналогичные, изменять положение нашего окна относительно рабочего стола в соответствии с определенными действиями мыши?


Название: Re: Форма через QtQuick и её элементы
Отправлено: twp от Марта 11, 2013, 23:00
да, так и есть. Единственное, возможно придется повозится, если нужно чтоб перемещение было реализовано только при клике в опреденном месте на форме, например на заголовке формы.