Russian Qt Forum

Qt => Qt Quick => Тема начата: kuzulis от Январь 13, 2015, 23:12



Название: [Решено]Как "распахнуть" виджет сразу на два монитора?
Отправлено: kuzulis от Январь 13, 2015, 23:12
Всем доброго времени.

Я ни разу не сталкивался с этой задачей: Имею два монитора подключенных к видяхе в режиме "виртуальный рабочий стол",
т.е. когда второй монитор является продолжением первого монитора.

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

Что-то не найду примерчиков.. Никто не сталкивался с этим?



Название: Re: Как "распахнуть" виджет сразу на два монитора?
Отправлено: Alex Custov от Январь 14, 2015, 00:21
думаю поместить виджет в 0,0 а размер посчитать как сумма из QDesktopWidget::availableGeometry() для каждого экрана


Название: Re: Как "распахнуть" виджет сразу на два монитора?
Отправлено: Igors от Январь 14, 2015, 09:27
(0, 0) - левый верхний угол "главного" монитора. Пробежаться по всем и найти минимальный x (или y) который может быть отрицательным


Название: Re: Как "распахнуть" виджет сразу на два монитора?
Отправлено: kuzulis от Январь 14, 2015, 11:35
Да, это понятно что нужно использовать QDesktopWidget., но непонятно как "протащить" его в QML.

Например при создании пустого Qt Quick проекта (на QtQuick v2.4 - последнего), QtCreator создает шаблон
в котором используется QQmlApplicationEngine, которое не является виджетом, поэтому в ней никак не получится использовать
QDesktopWidget.

Поэтому его нужно как-то использовать в классе QtQuick.Window.. ? Но как?


Название: Re: Как "распахнуть" виджет сразу на два монитора?
Отправлено: ecspertiza от Январь 14, 2015, 11:42
А ты дергай C++ функции из Qml. В C++ части посчитаешь позиционирование. Раз 5ый Qt используй QScreen. На маке это работать не будет, там позиционирование по другому считается походу :-)


Название: Re: Как "распахнуть" виджет сразу на два монитора?
Отправлено: kuzulis от Январь 14, 2015, 11:53
Не, решил так-то так (на Windows):

Код
C++ (Qt)
#include <QApplication>
#include <QDesktopWidget>
#include <QQuickView>
 
int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
   QQuickView view;
   view.setSource(QUrl(QStringLiteral("qrc:/main.qml")));
   view.showFullScreen();
 
   const QDesktopWidget *desktop = QApplication::desktop();
   if (desktop->isVirtualDesktop())
       view.resize(desktop->width(), desktop->height());
 
   return app.exec();
}