crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V  < 1 2 3  
Ответить в данную темуНачать новую тему
> Нужны идеи как реализовать поведение собственного виджета
SABROG
  опции профиля:
сообщение 15.4.2010, 16:29
Сообщение #21


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(igor_bogomolov @ 15.4.2010, 17:22) *
Может где то в ихнем блоге поинтересоваться где можно исходнички взять?

В комментах блога Zack'a просили, он чего-то молчит с 26 марта этого года.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.4.2010, 16:40
Сообщение #22


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(igor_bogomolov @ 15.4.2010, 20:22) *
Может где то в ихнем блоге поинтересоваться где можно исходнички взять?
запостил в форум, голосуйте/поддерживайте
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 23.4.2010, 21:42
Сообщение #23


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Хе-хе-хе. А я оказывается ещё тот куркуль. :blum1:

У меня есть рабочая копия их хранилища, в состоянии 902 версии. Залил на наш FTP
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 23.4.2010, 23:28
Сообщение #24


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Опяньки, гуляем мужики :lol:



void Folder::updateCache()
{
    //A lot faster than grabWidget because it doesn't actually
    // paint the widget, just grabs its backing store
    QPaintDevice *back = windowSurface()->paintDevice();
    QPixmap *px = dynamic_cast<QPixmap*>(back);
    if (px) {
        m_foldCache = *px;
    }
}


Угумс.

    QWidget *w1 = new QWidget;
    Ui_AppearanceConfigWidget *form1 = new Ui_AppearanceConfigWidget;
    form1->setupUi(w1);

    QWidget *w2 = new QWidget;
    Ui_EditConfigWidget *form2 = new Ui_EditConfigWidget;
    form2->setupUi(w2);

    m_first->setWrapper(w1);
    m_second->setWrapper(w2);


Врапперы, хмм.

Короче принцип у них такой.

- QWindowSurface используется, чтобы быстро сграбить окно. accept
- нужно точно прицеливаться в уголок, чтобы курсор мышки не попадал на пользовательский виджет. Для этого сделаны отступы. fail
- пользовательский виджет скрывается, чтобы освободить место для рисования на background'e под ними (на wrapper'e). fail

Откуда растут "ноги" у двух последних решений и почему fail:

В Qt нет стандартной возможности перехватывать события дочерних виджетов (даже если они намеренно блокируют их, нужен перехват). Отсюда отступ, который дает возможность пользователю кликнуть на виджет под пользовательским виджетом в маленьком пространстве в углу.

В Qt нет стандартной возможности рисовать родительскому виджету поверх всех своих детей. Отсюда уловка с сокрытием пользовательского виджета. Они конечно могли обойти это, но код бы серьезно вырос. У меня была надежда на бажный QGraphicsEffect о котором я запостил багрепорт и только через 10 дней тролли попросили меня предоставить компилируемый проект с демонстрацией проблемы. Затем они перевели багрепорт с "Paint system" на "Graphics view", что меня еще больше расстроило. Если они зарубят на корню возможность использовать QGraphicsEffect без графической сцены, то это меня сильно расстроит.

Собственно никакой магии в демке не оказалось. Без того же QWindowSurface в ней вполне реально обойтись. По крайней мере я теперь хоть знаю, что мыслил правильно и все мои догадки подтвердились.

Сообщение отредактировал SABROG - 23.4.2010, 23:56
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 24.4.2010, 0:25
Сообщение #25


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(SABROG @ 24.4.2010, 3:28) *
- нужно точно прицеливаться в уголок, чтобы курсор мышки не попадал на пользовательский виджет. Для этого сделаны отступы. fail
можно положить в угол прозрачный виджет, навёл на него мыша, "уголок бумаги" отогнулся, как сделано в некоторых типах веб рекламы

Цитата(SABROG @ 24.4.2010, 3:28) *
- пользовательский виджет скрывается, чтобы освободить место для рисования на background'e под ними (на wrapper'e). fail
опять же можно рисовать на наложеном поверх {полу}прозрачном виджете
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V  < 1 2 3
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 23.4.2024, 11:57