Russian Qt Forum
Сентябрь 30, 2024, 20:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [qt-4.2.0 Linux] Не рисует прозрачное окно  (Прочитано 8190 раз)
izoomer
Гость
« : Октябрь 04, 2007, 11:10 »

Есть JExplorer созданый от QDialog, хотел сделать прозрачным диалог так :
Код:
void JExplorer::paintEvent(QPaintEvent * /* event */){
QPainter p;
p.begin(this);
p.setRenderHint(QPainter::Antialiasing, true);
p.setBrush(QColor(0,0,0,100));
p.setPen( Qt::NoPen );
p.drawRect( rect() );
p.setBrush( QColor( 37, 86, 145 ) );
QPen pen(QColor( 28, 64, 109 ), 4, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
p.setPen(pen);
p.drawRoundRect( QRect(50, 110, 325, 380), 10, 6 );
p.drawRoundRect( QRect(425, 150, 325, 300), 10, 6 );
p.end();
}

а не рисуется прозрачный rect ... отчего вдруг ? аналогичный код для класа от QWidget работает
Записан
Dendy
Гость
« Ответ #1 : Октябрь 04, 2007, 13:28 »

Забыли указать прозрачность?

Код:
p.setBrush( QColor( 37, 86, 145, ??? ) );

Или что вы подразумеваете под прозрачным окном?
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #2 : Октябрь 04, 2007, 14:36 »

Кстати, да, тоже замечал такой баг под линуксом.

К примеру после

    QPainter p(this);
    p.setOpacity(0.5);

под виндой дальнейшая отрисовка будет полупрозрачной, под линуксом - нет.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
izoomer
Гость
« Ответ #3 : Октябрь 05, 2007, 12:58 »

Забыли указать прозрачность?

Код:
p.setBrush( QColor( 37, 86, 145, ??? ) );

Или что вы подразумеваете под прозрачным окном?

нет, не в этом месте ...
Код:
void JExplorer::paintEvent(QPaintEvent * /* event */){
QPainter p;
p.begin(this);
p.setRenderHint(QPainter::Antialiasing, true);
p.setBrush(QColor(0,0,0,100));
p.setPen( Qt::NoPen );
p.drawRect( rect() );

...
...
...
}

вот этот код рисует прозрачный фон для окна (на все окно) , а затем на этом прозрачном фоне рисуется все остальное ... однако этот вот самый фон не рисуется прозрачным.
Записан
Dodge
Гость
« Ответ #4 : Октябрь 05, 2007, 13:13 »

На скока я понимаю, паинтер не ресует само окно... он рисует поверх него, и как следствие нарисовать на окне прозрачную область не означает сделать прозрачным само окно.
Записан
izoomer
Гость
« Ответ #5 : Октябрь 05, 2007, 13:27 »

На скока я понимаю, паинтер не ресует само окно... он рисует поверх него, и как следствие нарисовать на окне прозрачную область не означает сделать прозрачным само окно.
painter рисует само окно , и в paintEvent рисуем все что захотим, то есть как будет выглядеть окно ... вот и для QWidget если нарисовать прозрачный QRect на все пространство ( QWidget::rect() ) то получим QWidget с заданной прозрачностью . Но у меня почему то для одного QWidget работает , а для QDialog не хочет ... странно.
Записан
yshurik
Гость
« Ответ #6 : Октябрь 06, 2007, 00:15 »

Не будет работать так как нужна поддержка оконной системы.
Вы можете рисовать любые полупрозрачные видгеты поверх основного
окна которое не будет полупрозрачным через paintEvent.

В данном случае QMainWindow не будет полупрозрачным и QDialog тоже
(это разные окна оконной системы)

Поверх них - пожалуйста (когда они parent для ваших widgets)
Записан
SLiDER
Гость
« Ответ #7 : Октябрь 06, 2007, 01:02 »

Что-то мне подсказывает, что в Linux чтобы получить прозрачное окно вам как минимум еще нужно иметь композитный менеджер окон (compiz? beryl?). Тут как-то пробегала ссылка на блог Zack Rusin, и у него там был примерчик на эту тему, кажется с птичкой в качестве главной формы. Вот вам прямой линк http://zrusin.blogspot.com/2006_10_01_archive.html, статейка называется "ARGB windows". Удачи.
Записан
Dodge
Гость
« Ответ #8 : Октябрь 08, 2007, 10:47 »

painter рисует само окно , и в paintEvent рисуем все что захотим, то есть как будет выглядеть окно ... вот и для QWidget если нарисовать прозрачный QRect на все пространство ( QWidget::rect() ) то получим QWidget с заданной прозрачностью . Но у меня почему то для одного QWidget работает , а для QDialog не хочет ... странно.
Вот просто слов нету, кроме как - аффтар убей себя ап стену...

ПАИНТЕР НЕ РИСУЕТ ОКНО!!!
Окно рисует оконная система, и если нарисовать прозрачную область на окне(При помощи паинтера), это не даст эффект прозрачности для самого окна, это дасть эффект прозрачности для уже нарисованных элементов на окне!

З.Ы. если у аффтора есть код, который с использованием QPainter'а делает окно прозрачным, то предлагаю объявить данного оратора мегашаманом программирования, выдать имменной бубен и послать работать в мелкосовт, там такие нужны.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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