Russian Qt Forum

Qt => Общие вопросы => Тема начата: ¤Se®ega¤ от Апрель 06, 2009, 02:09



Название: Приложение на нескольких мониторах
Отправлено: ¤Se®ega¤ от Апрель 06, 2009, 02:09
Подскажите где почитать про использование нескольких мониторов.Допустим мне необходимо запустить несколько окон, чтобы каждое окно было на отдельном мониторе.мониторов больше 2(ну это я так, чтобы было написал).


Название: Re: Приложение на нескольких мониторах
Отправлено: uriel от Апрель 06, 2009, 06:56
Примерно так, я думаю. :)
Код
C++ (Qt)
QWidget *wgt1 = new QWidget(QApplication::desktop()->screen(1));
QWidget *wgt2 = new QWidget(QApplication::desktop()->screen(2));

А вообще посмотрите документацию по QDesktopWidget.


Название: Re: Приложение на нескольких мониторах
Отправлено: Alex Custov от Апрель 06, 2009, 18:10
и надо учитывать, что в случае с Xinerama количество screens будет == 1


Название: Re: Приложение на нескольких мониторах
Отправлено: ¤Se®ega¤ от Апрель 06, 2009, 22:02
и надо учитывать, что в случае с Xinerama количество screens будет == 1
Это  касается "извращенного" использования мониторов (N в 1 либо 1 в N)?
Мне се гораздо проще.на каждом мониторе свое окно.одно.Сколько мониторов, столько и окон.


Название: Re: Приложение на нескольких мониторах
Отправлено: break от Май 07, 2009, 13:02
Столкнулся с подобной задачей!
Ubuntu Linux 8.04 (под виндой тоже должно работать но не тестил)
Карты Nvidia
Конфиг который удалось заставить стабильно работать --- четыре монитора (2 видеокарты на материнке PCI-Express), из них любой может быть повернут (90, -90, 180), также вместо любого можно использовать сенсорные панели ( General Touch OTL17, OTL173, OTL15), панели также могут быть повернуты, есть способ откалибровать их. Должно работать и с другими панелями (под рукой были еще какие-то китайские завелись и откалибровались). На экранах может быть совершенно разное установлено разрешение, они вообще могут быть любыми - например 42 дюйма плазма телек и автомобильный телек + сенсорная панель 17 дюймов... и т.д.

В xorg.conf экраны должны быть настроены как Separate X Screen, Xenerama должна быть отключена

Через Qt ваша задача решается так:

QWidget* parentSCR = QApplication::desktop()->screen( m_nScreenNum );
m_pMyFormClass = new CMyFormClass( parentSCR );

m_pMyFormClass - появится на экране m_nScreenNum (от 0 до число экранов-1)

Кроме того в линукс - когда экраны именно Separate X Screen, - можно запустить любую программу на нужном экране командой:

DISPLAY=:0.1 ./my_super_puper_app

здесь
:0.0 --- 1 экран
:0.1 --- 2 экран
:0.2 --- 3 экран
:0.3 --- 4 экран

Если нужно поделюсь своим xorg.conf (где настроены 4 моника + 2 сенсорных панели) + выложу все необходимое для нормальной калибровки


Название: Re: Приложение на нескольких мониторах
Отправлено: kuzulis от Май 12, 2009, 12:06
2 ¤Se®ega¤ ,

а не проще ли настроить видеокарту на работу с двумя мониторами и мышкой перетянуть окно на другой монитор? :) (если речь про Windows идет, т.к. в Linux не пробовал)


Название: Re: Приложение на нескольких мониторах
Отправлено: Dodge от Май 12, 2009, 13:11
Если нужно поделюсь своим xorg.conf (где настроены 4 моника + 2 сенсорных панели) + выложу все необходимое для нормальной калибровки
Выложи =)


Название: Re: Приложение на нескольких мониторах
Отправлено: break от Май 13, 2009, 22:44
Код:
#
#  Универсальный XORG.CONF
#  Конфигаруция 4 экрана + 2 сенсорных панели (закомментированы в Layout-е)
#  Должно нормально работать с любым числом экранов от 1 до 4
#  Откалибровано для сенсорной панели General Touch OTL17
#  После первого запуска поставить реальные bus-id для видеокарт чтобы нормально заработали все экраны
#  их можно узнать запустив nvidia-settings
#  Раскомментировать сенсорные панели если это необходимо (на некоторых системах не запускается если панели раскомментированы в лейауте но не подключены на самом деле)
#  Есть возможность калибровки сенсорных панелей - требуется запуск без Xorg (работает не совсем как написано, но в конце выдает верные значения MinX, MinY, MaxX, MaxY)
#  Для запуска калибровки - перегрузиться в recovery mode (или остановить Xorg) перейти в папку /usr/lib/xf86-input-evtouch/ и запустить calibrate.sh
#  предварительно файл empty_cursor.xbm должен лежать в корне (скопировать из /usr/share/xf86-input-evtouch)
#  естественно evtouch олжен быть установлен
#  Переключения Русск/Англ раскладки по CapsLock
#  Поворот экранов осуществляется командо xrand  например: xrand -d:0.1 -o left    ------- повернет второй экран

Section "Files"
Fontpath "/usr/local/share/fonts"
EndSection

Section   "InputDevice"
    ## общие параметры для первой сенсорной панели
    Identifier "touchscreen1"
    Driver "evtouch"
    Option "Device" "/dev/input/by-path/pci-0000:00:0b.0-usb-0:1:1.0-event-mouse"
    Option "DeviceName" "touchscreen1"
    Option  "ScreenNumber" "0"
    Option  "MoveLimit" "3"

   ## параметры для панели MicroTouch OTL173
Option "MinX" "1257"
Option "MinY" "1538"
Option "MaxX" "4487"
Option "MaxY" "4193"
    Option "SwapY" "1"

    ## общие параметры пока не используемые
    #Option   "SwapXY"   "1"

    #Option "TapTimer" "50"
    #Option "ReportingMode" "Raw"
    #Option "Emulate3Buttons" "No"
    #Option "Emulate3Timeout" "50"
    #Option "SendCoreEvents" "On"
    #Option "Calibrate" "1"
    #Option "Rotate" "CCW"
EndSection

Section "InputDevice"
    ## общие параметры для второй сенсорной панели
    Identifier "touchscreen2"
    Driver "evtouch"
    Option "Device" "/dev/input/by-path/pci-0000:00:0b.0-usb-0:2:1.0-event-mouse"
    Option "DeviceName" "touchscreen2"
    Option  "ScreenNumber" "1"
    Option  "MoveLimit" "3"

    ## параметры для панели MicroTouch OTL173 для повернутой панели 90
    Option "MinX" "1239"
    Option "MinY" "1581"
    Option "MaxX" "5295"
    Option "MaxY" "3647"
    Option "SwapY" "1"

    ## общие параметры пока не используемые
    #Option   "SwapXY"   "1"
    #Option "ReportingMode" "Raw"
    #Option "Emulate3Buttons" "No"
    #Option "Emulate3Timeout" "50"
    #Option "SendCoreEvents" "No"
    #Option "Calibrate" "1"
    #Option "Rotate" "CCW"
EndSection

Section "InputDevice"
Identifier "Generic Keyboard"
Driver "kbd"
Option "CoreKeyboard"
Option "XkbRules" "xorg"
Option "XkbModel" "pc105"
Option "XkbLayout" "us,ru(winkeys)"
Option "XkbVariant" "nodeadkeys"
Option "XkbOptions" "grp:caps_toggle, grp:win_switch"
EndSection

Section "InputDevice"
Identifier "Configured Mouse"
Driver "mouse"
Option "CorePointer"
Option "Device" "/dev/input/mice"
Option "Protocol" "ImPS/2"
Option "ZAxisMapping" "4 5"
Option "Emulate3Buttons" "true"
EndSection

Section "InputDevice"
Driver "wacom"
Identifier "stylus"
Option "Device" "/dev/input/wacom"
Option "Type" "stylus"
Option "ForceDevice" "ISDV4"# Tablet PC ONLY
EndSection

Section "InputDevice"
Driver "wacom"
Identifier "eraser"
Option "Device" "/dev/input/wacom"
Option "Type" "eraser"
Option "ForceDevice" "ISDV4"# Tablet PC ONLY
EndSection

Section "InputDevice"
Driver "wacom"
Identifier "cursor"
Option "Device" "/dev/input/wacom"
Option "Type" "cursor"
Option "ForceDevice" "ISDV4"# Tablet PC ONLY
EndSection

Section "Device"
Identifier "nVidia_GeForce_1"
Driver "nvidia"
Busid "PCI:1:0:0"
Option "AddARGBVisuals" "True"
Option "AddARGBGLXVisuals" "True"
Option "NoLogo" "False"
Screen 0
EndSection

Section "Device"
Identifier "nVidia_GeForce_2"
Driver "nvidia"
Busid "PCI:1:0:0"
Option "NoLogo" "False"
Screen 1
EndSection

Section "Device"
Identifier "nVidia_GeForce_3"
Driver "nvidia"
#Busid "PCI:4:0:0"
Option "AddARGBVisuals" "True"
Option "AddARGBGLXVisuals" "True"
Option "NoLogo" "False"
Screen 0
EndSection

Section "Device"
Identifier "nVidia_GeForce_4"
Driver "nvidia"
#Busid "PCI:4:0:0"
Option "NoLogo" "False"
Screen 1
EndSection

Section "Monitor"
Identifier "Monitor_1"
Option "DPMS"
Horizsync 28-51
Vertrefresh 43-60
EndSection

Section "Monitor"
Identifier "Monitor_2"
Option "DPMS"
Horizsync 28-51
Vertrefresh 43-60
EndSection

Section "Monitor"
Identifier "Monitor_3"
Option "DPMS"
Horizsync 28-51
Vertrefresh 43-60
EndSection

Section "Monitor"
Identifier "Monitor_4"
Option "DPMS"
Horizsync 28-51
Vertrefresh 43-60
EndSection

Section "Screen"
Identifier "Screen_1"
Device "nVidia_GeForce_1"
Monitor "Monitor_1"
Defaultdepth 24
Option "RandRRotation" "true"
SubSection "Display"
Modes "1280x1024"
EndSubSection
EndSection

Section "Screen"
Identifier "Screen_2"
Device "nVidia_GeForce_2"
Monitor "Monitor_2"
Defaultdepth 24
Option "RandRRotation" "true"
SubSection "Display"
Modes "1280x1024"
EndSubSection
EndSection

Section "Screen"
Identifier "Screen_3"
Device "nVidia_GeForce_3"
Monitor "Monitor_3"
Defaultdepth 24
Option "RandRRotation" "true"
SubSection "Display"
Modes "1280x1024"
EndSubSection
EndSection

Section "Screen"
Identifier "Screen_4"
Device "nVidia_GeForce_4"
Monitor "Monitor_4"
Defaultdepth 24
Option "RandRRotation" "true"
SubSection "Display"
Modes "1280x1024"
EndSubSection
EndSection

Section "ServerLayout"
Identifier "Default Layout"
Screen 0 "Screen_1" 0 0
Screen 1 "Screen_2" RightOf "Screen_1"
Screen 2 "Screen_3" RightOf "Screen_2"
Screen 3 "Screen_4" RightOf "Screen_3"
Inputdevice "Generic Keyboard"
Inputdevice "Configured Mouse"
#InputDevice "touchscreen1"
#InputDevice "touchscreen2"

# Uncomment if you have a wacom tablet
# InputDevice     "stylus" "SendCoreEvents"
# InputDevice     "cursor" "SendCoreEvents"
# InputDevice     "eraser" "SendCoreEvents"
EndSection

Section "Extensions"
Option "Composite" "Enable"
EndSection


Кроме способа калибровки описанного в комментарие Xorg - есть еще т.к. этот не со всеми панелями будет работать, - в некоторых случаях необходима пересборка драйвера usbtouchscreen - есть архив который знающие люди уже создали - со всеми исходниками и даже маленькой программой калибровки написанной на Qt - вышлю на mail если надо