Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [qt] вывод на несколько мониторов 
V
    Опции темы
gordmiand
Дата 22.7.2010, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



Есть 2 монитора с независимыми друг от друга рабочими столами (без использования опции TwinView (единый раб. стол)). При загрузке приложения необходимо загрузить одну его форму во весь экран1 (верхний дисплей), а другую форму – на весь экран2 (нижний дисплей)…как это оптимальнее и изящнее всего сделать?

Я в свое время пробовал так 
Код

Form1->setGeometry(0,0,100,100);
Form1->showFullScreen(); 
...
Form2->setGeometry(0,1025,100,100);
Form2->showFullScreen(); 

Но не уверен, что это сработает (на данный момент нет возможности это проверить)…

Но это с привязкой к разрешениями мониторов (1280x1024) – типа я прошу вывести мне форму Form1 например размером 100х100 в координаты (0,0) и раскрываю ее на весь экран, а затем – форму Form2 размером 100х100 в координаты (0, например 1025) – типа ниже формы Form1 в надежде, что у обоих мониторов единый “пиксельный размер…а  вот если это не так, то как такую задачку решить без привязки к текущим разрешениям мониторов?


Это сообщение отредактировал(а) gordmiand - 22.7.2010, 23:15
PM MAIL   Вверх
pilotnet
Дата 23.7.2010, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 22.4.2008

Репутация: нет
Всего: нет



Глянь QDesktopWidget
PM MAIL   Вверх
gordmiand
Дата 23.7.2010, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



pilotnet: дайте пож-та примерчик, а то я не совем понял по-английски что именно из этого класса и как надо использовать... 
задача - вывести разные формы одного приложения на независимые друг от друга рабочие столы двух мониторов (каждую форму во весь экран (showFullScreen))...
PM MAIL   Вверх
pilotnet
Дата 26.7.2010, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 22.4.2008

Репутация: нет
Всего: нет



QRect screenres = QApplication::desktop()->screenGeometry(screenNumber);
widget->move(QPoint(screenres.x(), screenres.y()));
PM MAIL   Вверх
gordmiand
Дата 29.7.2010, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



pilotnet: 
то есть я могу написать:
Код

QRect screenres = QApplication::desktop()->screenGeometry(1);
Form1->move(QPoint(screenres.x(), screenres.y()));
Form1->showFullScreen();

QRect screen2res = QApplication::desktop()->screenGeometry(2);
Form2->move(QPoint(screen2res.x(), screen2res.y()));
Form2->showFullScreen();

и тогда при загрузке приложения форма Form1 будет во весь экран1, а форма2 - во весь экран2 или нет? если нет, то тогда как это сделать правильно (просто в данный момент нет возможности проверить вышеприведенный мой код на 2 мониторах)?

Это сообщение отредактировал(а) gordmiand - 29.7.2010, 22:13
PM MAIL   Вверх
gordmiand
Дата 2.8.2010, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



пробовал так: (операционка Linux OpenSuse 10.3)
Код

QRect screenres = QApplication::desktop()->screenGeometry(0);
Form1->move(QPoint(screenres.x(), screenres.y()));
Form1->showFullScreen();

QRect screen2res = QApplication::desktop()->screenGeometry(1);
Form2->move(QPoint(screen2res.x(), screen2res.y()));
Form2->showFullScreen();

это конечно не работает - одна форма выводится поверх другой на одном и том же экране, на котором было запущено приложение, так как у меня 2 независимых друг от друга рабочих стола - т.е. какое-либо окошко нельзя перетащить с одного экрана на другой, но мышка переходит (так и должно быть) - так как же при такой настройке рабочих столов мониторов сделать вывод каждой формы (Form1 и Form2) на свой экран (№0 и №1 соответственно (номера я менял на 1 и 2 - не помогает))? ... использование размеров (как в примере выше) каждой формы не помогает, так как у каждой из них свое разрешение (у каждой 1280*1024 - так и должно быть)... подскажите пож-та...очень надо....
PM MAIL   Вверх
SABROG
Дата 2.8.2010, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



А QDesktopWidget::screenCount() вообще возвращает число больше одного?


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
gordmiand
Дата 2.8.2010, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



SABROG: конечно screenCount возвращает число >1...почему нет? у меня эта функция возвращает "2" (собственно 2 монитора у меня и есть)...только к чему тут эта функция?
PM MAIL   Вверх
SABROG
Дата 2.8.2010, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



При создании виджетов попробуй для одного выставить родителем один экран, а для другого другой:

Код

MyWidget w1(QDesktopWidget::screen(0));
MyWidget2 22(QDesktopWidget::screen(1));
w1.show();
w2.show();
return app.exec();



--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
gordmiand
Дата 2.8.2010, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



допустим такой примерчик:
Код

class Form2 : public QWidget {
    Q_OBJECT
public:
    Form2(QWidget *parent = 0);
    ~Form2();

protected:
    void changeEvent(QEvent *e);

private:
    Ui::Form2 *ui;
};
/////////////////////////////////

class MainWindow : public QMainWindow {
    Q_OBJECT
public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();

    Form2 *exz2;

protected:
    void changeEvent(QEvent *e);

private:
    Ui::MainWindow *ui;
};
/////////////////////////////////


#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDesktopWidget>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    exz2 = new Form2(QDesktopWidget::screen(0));

}

ошибка:
error: cannot call member function 'QWidget* QDesktopWidget::screen(int)' without object 
PM MAIL   Вверх
SABROG
Дата 3.8.2010, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Извиняюсь, я не обратил внимание, что метод не статический. Тогда так:

Код

exz2 = new Form2(QApplication::desktop()->screen(0));



--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
gordmiand
Дата 3.8.2010, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



ошибку исправил так:
Код

    QDesktopWidget desk;
    exz2 = new Form2(desk.screen( 1 )  );
    exz2->show();

но эффекта все равно нет...обе формы выводятся на один и тот же экран вне зависимости от указанного мной в констукторе номера экрана для Form2...так почему же не воспринимается задание номера экрана для формы? вроде QDesktopWidget::screen возвращает QWidget *, что как раз и надо для параметра (задает родителя для формы) конструктора класса Form2...ничего не понимаю....вроде так все логично - в качестве родителя форме задаешь нужный тебе экран...может надо делать какие-то дополнительные магипуляции с классом Form2?

затем пробовал еще так:
Код

exz2 = new Form2(QApplication::desktop()->screen( 0 )  ); // или менял Nскрина на 1,2

без именений...
на всякий случай кинул проект проги...

Это сообщение отредактировал(а) gordmiand - 3.8.2010, 10:07

Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  Proekktt_v2.rar 11,73 Kb
PM MAIL   Вверх
SABROG
Дата 3.8.2010, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(gordmiand @  3.8.2010,  10:04 Найти цитируемый пост)
без именений...

Попробуй получить ширину в разрешении монитора через QDesktopWidget::availableGeometry(), а потом вызвать метод move() у своего виджета, чтобы передвинуть виджет дальше чем позволяет ширина рабочего стола, возможно тогда виджет появится на другом монике.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
wectula
Дата 9.12.2022, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 9.12.2022

Репутация: нет
Всего: нет




Модератор: Сообщение скрыто.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.1704 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.