Russian Qt Forum
Июнь 16, 2024, 03:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Автоматическое преобразование приложения в Graphics View  (Прочитано 16075 раз)
Sasha
Гость
« : Апрель 09, 2012, 11:23 »

Здравствуйте.

Я нарисовал интерфейс приложения в дизайнере. При этом в программе автоматичеки добавился код по его созданию. Теперь я хочу автоматичеки преобразовать его к GraphicsView. Как это лучше сделать?

Я попробовал так:
Код:
int g_cxWorld = 640;
int g_cyWorld = 480;
 
class GraphicsView : public QGraphicsView
{
public:
    GraphicsView(QGraphicsScene *scene) : QGraphicsView(scene){}
 
    virtual void resizeEvent(QResizeEvent *event)
    {
        double cx, cy;
        double khw = double(event->size().height()) / double(event->size().width());
        if( khw > (double(g_cyWorld)/double(g_cxWorld)) )
            cy = g_cyWorld, cx = (cy/khw);
        else
            cx = g_cxWorld, cy = (cx*khw);
 
        scene()->items().at(0)->window()->resize(cx,cy);
        setSceneRect(0,0,cx,cy);
        fitInView(sceneRect(), Qt::IgnoreAspectRatio);
    }
};
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
 
    MainWindow *pw = new MainWindow;
 
    QGraphicsScene scene(0, 0, g_cxWorld, g_cyWorld);
    pw->resize(g_cxWorld,g_cyWorld);
    scene.addWidget(pw,Qt::Window);
    GraphicsView view(&scene);
    view.show();
 
    return a.exec();
}
Вроде бы получилось, но есть проблеммы и главная из них:
Прилипающие окна (dock-и) ведут себя мягко выражаясь плохо:
  • даже в оторванном виде они находятся внутри главного окна
  • Прилипают не тогда, когда ожидаешь
  • Будучи повторно прилепленными остаются с рамками и заголовком, как будто не прилепленны
Видимо нужно преобразовывать к графическому виджету не целиком приложение, а по частям, но при попытке преобразовать тот-же dock я достаточно легко преобразовал его внутренний виджет, но остался не преобразованным заголовок (который рисуется, когда dock прилеплен). Далее я попытался создать один графическией виджет и перебросить в него все дочерние виджеты dock-а. И понеслась... Расположение их оказалось не таким как надо, а при попытке отцепить dock, программа вообще упала.
Вобщем у кого какие идеи?
Записан
mutineer
Гость
« Ответ #1 : Апрель 09, 2012, 11:25 »

ужас какой... зачем оно вообще так? либо используй морду из дизайнера или делай все сразу в сцене, имхо
Записан
Sasha
Гость
« Ответ #2 : Апрель 09, 2012, 11:58 »

ужас какой... зачем оно вообще так? либо используй морду из дизайнера или делай все сразу в сцене, имхо
Хорошо спрошу по другому:
Я хочу чтобы, кода я меняю размер главного окна приложения, автоматически менялся масштаб его содержимого. Под масштабом я понимаю следующее: все контролы должны увеличиваться/уменьшаться пропорционально изменению размера главного окна - это, конечно легко решается лэйаутами, НО мне нужно чтобы при этом автоматически увеличивались/уменьшались шрифты всех текстов (на кнопках, в эдитах, меню,...) и все остальные "подэлементы" контролов - иконки на кнопках, закладки на тулбарах, кнопки на скролингах, стрелочки на кнопках скролингов и прочее... Как это сделать? Одна из идей - это всё засунуть в графический вид и дальше хоть масштабировать, хоть поворачивать, хоть ещё любые другие матричные преобразования, хотя мне нужно только масштабирование. И вот, пойдя по этому пути, я наткнулся на проблеммы, частично описанные в первом моём посте темы. Т.е. пока главная проблемма с неожидаемым поведением прилипающий окон (dock-ов) будучи преобразованных к графическому виду.
Записан
Sasha
Гость
« Ответ #3 : Апрель 09, 2012, 12:02 »

ужас какой... зачем оно вообще так? либо используй морду из дизайнера или делай все сразу в сцене, имхо
Но если не использовать дизайнер, то сразу же теряется часть преимуществ. Например, сложнее что-то подправить в интерфейсе.
Записан
V1KT0P
Гость
« Ответ #4 : Апрель 09, 2012, 12:38 »

ужас какой... зачем оно вообще так? либо используй морду из дизайнера или делай все сразу в сцене, имхо
Хорошо спрошу по другому:
Я хочу чтобы, кода я меняю размер главного окна приложения, автоматически менялся масштаб его содержимого. Под масштабом я понимаю следующее: все контролы должны увеличиваться/уменьшаться пропорционально изменению размера главного окна - это, конечно легко решается лэйаутами, НО мне нужно чтобы при этом автоматически увеличивались/уменьшались шрифты всех текстов (на кнопках, в эдитах, меню,...) и все остальные "подэлементы" контролов - иконки на кнопках, закладки на тулбарах, кнопки на скролингах, стрелочки на кнопках скролингов и прочее... Как это сделать? Одна из идей - это всё засунуть в графический вид и дальше хоть масштабировать, хоть поворачивать, хоть ещё любые другие матричные преобразования, хотя мне нужно только масштабирование. И вот, пойдя по этому пути, я наткнулся на проблеммы, частично описанные в первом моём посте темы. Т.е. пока главная проблемма с неожидаемым поведением прилипающий окон (dock-ов) будучи преобразованных к графическому виду.
Может стоит глянуть в сторону QML? Ибо то что ты описываешь просто ад какой-то.
Записан
Bepec
Гость
« Ответ #5 : Апрель 09, 2012, 12:41 »

Очень похоже на :
- Милок, ай милок, чагось ты тут ядрёну бомбу приволок?
- Дык картошку копать бабушка.
- Чагось не лопатой то?
- Таки долго, а так бум - и вся картошка выкопана.

Прав Виктор - вы ад хотите сотворить. Зачем вам это? Лучше опишите чего хотите сделать (не "надо мне вот это", а "хоче сделать редактор"). А мы вам способ посоветуем.
Записан
Sasha
Гость
« Ответ #6 : Апрель 09, 2012, 13:10 »

Может стоит глянуть в сторону QML?
А можно ли в QML создавать стандартные контролы?

Ибо то что ты описываешь просто ад какой-то.
Что именно ад? Само масштабирование или то, как я это хочу делать?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Апрель 09, 2012, 13:16 »

НО мне нужно чтобы при этом автоматически увеличивались/уменьшались шрифты всех текстов (на кнопках, в эдитах, меню,...) и все остальные "подэлементы" контролов - иконки на кнопках, закладки на тулбарах, кнопки на скролингах, стрелочки на кнопках скролингов и прочее... Как это сделать? Одна из идей - это всё засунуть в графический вид и дальше хоть масштабировать, хоть поворачивать, хоть ещё любые другие матричные преобразования, хотя мне нужно только масштабирование.
Не изучал но вряд ли кто-то будет уменьшать шрифты и.т.п. - скорее всего просто "в картинку" т.е. растр и с масштабом сильно не разгонишься. Выбранный путь нормальный (а может и лучший) если нужно что-то типа "виртуального экрана". Но просто "чтобы уменьшить" - конечно несерьезно

И вот, пойдя по этому пути, я наткнулся на проблеммы, частично описанные в первом моём посте темы. Т.е. пока главная проблемма с неожидаемым поведением прилипающий окон (dock-ов) будучи преобразованных к графическому виду.
А попробовать сначала добавить только док - как он себя поведет?
Записан
Sasha
Гость
« Ответ #8 : Апрель 09, 2012, 13:16 »

Очень похоже на :
- Милок, ай милок, чагось ты тут ядрёну бомбу приволок?
- Дык картошку копать бабушка.
- Чагось не лопатой то?
- Таки долго, а так бум - и вся картошка выкопана.
Действительно похоже Улыбающийся

Прав Виктор - вы ад хотите сотворить. Зачем вам это? Лучше опишите чего хотите сделать (не "надо мне вот это", а "хоче сделать редактор"). А мы вам способ посоветуем.
Я уже не знаю как ещё описать. Можно ещё так:
Будучи раскрытым на весь экран приложение должно МАКСИМАЛЬНО одинаково выглядеть при разных разрешениях экрана.
Вобщем аналог лэйаутов, только с учётом содержимого контролов, а не только геометрии.
Записан
Bepec
Гость
« Ответ #9 : Апрель 09, 2012, 13:23 »

Я уже не знаю как ещё описать. Можно ещё так:
Будучи раскрытым на весь экран приложение должно МАКСИМАЛЬНО одинаково выглядеть при разных разрешениях экрана.
Вобщем аналог лэйаутов, только с учётом содержимого контролов, а не только геометрии.

По секрету скажу - приложение с фиксированным размером виджетов, будет
Цитировать
МАКСИМАЛЬНО одинаково выглядеть при разных разрешениях экрана.


PS а зачем вам это?? просто и банально скажи - зачем? Цель этого приложения? Пульт/редактор/система связи/ядрёный чемоданчик/компилятор/IDE?
Записан
Sasha
Гость
« Ответ #10 : Апрель 09, 2012, 13:27 »

Не изучал но вряд ли кто-то будет уменьшать шрифты и.т.п. - скорее всего просто "в картинку" т.е. растр и с масштабом сильно не разгонишься. Выбранный путь нормальный (а может и лучший) если нужно что-то типа "виртуального экрана". Но просто "чтобы уменьшить" - конечно несерьезно
В первом посте темы я привёл код, который работает. И там всё масштабируется, но есть огрехи, которые я и ищу как исправить.

Я не совсем понял, что значит:
А попробовать сначала добавить только док - как он себя поведет?
В смысле не загонять его в графический вид?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Апрель 09, 2012, 13:33 »

В смысле не загонять его в графический вид?
В смысле попробовать только док виджет - вместо главного окна.
Записан
Sasha
Гость
« Ответ #12 : Апрель 09, 2012, 13:35 »

По секрету скажу - приложение с фиксированным размером виджетов, будет
Цитировать
МАКСИМАЛЬНО одинаково выглядеть при разных разрешениях экрана.
В моём понимании не МАКСИМАЛЬНО поскольку, например, кнопка занимающая 1/10 экрана при разрешении 640x480 будет занимать только 1/20 экрана при разрешении 1280x960

PS а зачем вам это?? просто и банально скажи - зачем? Цель этого приложения? Пульт/редактор/система связи/ядрёный чемоданчик/компилятор/IDE?
Пульт под сенсорный экран. Причём возможно, что экранов может быть и несколько и возможно потребуется отдельные окна приложения располагать на разных экранах (отсюда необходимость dock-ов). Разрешение же экрана заранее не оговорено, да и помоему это нехорошо его фиксировать.
Записан
Sasha
Гость
« Ответ #13 : Апрель 09, 2012, 13:38 »

В смысле попробовать только док виджет - вместо главного окна.
А разве док может быть без главного окна? Или я что-то не понимаю? Сейчас посмотрю, конечно.
Записан
Sasha
Гость
« Ответ #14 : Апрель 09, 2012, 13:45 »

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


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