Russian Qt Forum
Апреля 29, 2025, 12:13 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Форма через QtQuick и её элементы  (Прочитано 4075 раз)
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. Но нужно больше информации по этому поводу.

Прошу просмотреть написанной мной и отписать ваши мнения по этому поводу.
Спасибо за будущие ответы.
« Последнее редактирование: Марта 09, 2013, 23:01 от RoulanD » Записан
twp
Гость
« Ответ #1 : Марта 10, 2013, 19:31 »

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

По первым двум пунктам - врядли можно проще сделать. Только не понятно зачем запоминать размер окна при разворачивании и возвращаться к нему при восстановлении, если это стандартное поведение для окна. Обычно сохраняется состояние окна при его закрытии и восстановление при открытии. По третьему пункту - что значит Drag and drop формы? Куда она должна дропаться? По четвертому пункту - изменение размеров должно быть доступно без каких-либо дополнительных усилий. Неужели не работает?

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

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

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

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

Жду еще ответов.
Спасибо.
Записан
twp
Гость
« Ответ #3 : Марта 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
« Последнее редактирование: Марта 11, 2013, 19:50 от twp » Записан
RoulanD
Гость
« Ответ #4 : Марта 11, 2013, 22:23 »

С "ресайзом" все ясно.

Как быть с "перетаскиванием" окна по рабочему столу. Как я понял действия аналогичные, изменять положение нашего окна относительно рабочего стола в соответствии с определенными действиями мыши?
Записан
twp
Гость
« Ответ #5 : Марта 11, 2013, 23:00 »

да, так и есть. Единственное, возможно придется повозится, если нужно чтоб перемещение было реализовано только при клике в опреденном месте на форме, например на заголовке формы.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.071 секунд. Запросов: 20.