April 20, 2012

Mart Mart
Lab Rat
47 posts

Полупрозрачни тупбарове и прозорци

 

Полупрозрачни тупбарове и прозорци

Искам да направя тулбара в един прозорец да е същия на цвят като рамката (заглавната част) на същия прозорец, а не като цвета на прозореца.
Например – ако рамката е тъмна, както в Убунту, тулбара да е също тъмен и да се получи едно преливане (няма меню между тях).
Съответно ако рамката е с някаква прозрачност, тулбара да е също с такава прозрачност.

Друг въпрос – за един обикновен текстов редактор с QTextEdit – как да направя формата да е полу-прозрачна, за да се получи текстов редактор който да има за фон самия десктоп.

Има много такива редактори за Линукс. Ето един пример [linux-bg.org] за това което искам да направя.
В моята програмка няма меню, а само тулбар и текстов редактор. Искам текстовия редактор да е прозрачен, а тулбара да е същия на цвят като рамката и евентуално да е също полу-прозрачен.

Конкретни въпроси:
1. Как да взема цвета на рамката (заглавната част) на един прозорец;
2. Как да направя тулбара да е със същия този цвят (и прозрачност);
3. Как да направя една цяла форма да е полупрозрачна (заедно със всички компоненти в нея);

12 replies

April 20, 2012

task_struct task_struct
Ant Farmer
355 posts

Здравей,

Това, което показваш на снимката е много мръсен хак ( изкуствена прозрачност ), защото като гледам е старият Гном. Като цяло в новите системи(за Линукс) прозрачността се определя от мениджъра на прозорците( KWin, Metacity, Beryl и т.н ) в Windows нямам идея. Има начин през Qt да поискаш нещо да е прозрачно, но мениджъра ще реши наистина ли да го направи и как.

Виж тази тема [qt-project.org] там има пример, но имай в предвид, че ако мениджъра на прозорците няма openGL ускорение, прозрачността може драстично да намали производителността на системата.

За цвета: Само на една ОС ли ще го ползваш или на много, защото това ми се вижда платформено зависимо?

 Signature 

“Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program.”
- Linus Torvalds

April 20, 2012

Mart Mart
Lab Rat
47 posts

Пробвах с setWindowOpacity(0.5); и стана. Целия прозорец стана полу-прозрачен.
Но ми трябваха само няколко секунди за да разбера, че това е само една атракция и е направо невъзможно да се работи с полу-прозрачен прозорец (дори и на 95%). Вярно че се вижда десктопа, но ако отдолу е отворен друг редактор става голяма каша.
А и да не говорим, че така става прозрачен целия прозорец, включително и текста, а на мен ми се щеше само QTextEdit да е полу-прозрачен. И то само фона му, не текста.
Така че се отказвам от идеята за полупрозрачност на каквото и да е.

Сега остава въпроса как да взема цвета на рамката на прозореца за да направя и тулбара ми да е същия цвят?
Явно няма да е прозрачен, но поне да е в същия цвят.

И да – интересува ме за мултиплатформено използване.

April 20, 2012

task_struct task_struct
Ant Farmer
355 posts

За тоя номер да се вижда десктопа мисля, че има начин. Взима се “скрийншот” на десктоп-а и после си преимплементираш на QTextEdit прерисуването за да нарисуваш за бекграуд частта от десктопа, която би трябвало да се вижда. При всяко местене на прозореца, трябва да прерисуваш и ще е тежко. А и никога не може да си сигурен, че потребителя не си е сложил картинка с цвят, близък до цвета на текста.

За цвета: Разгледай класа QPalette [qt-project.org] . С QApplication::palette () [qt-project.org] можеш да вземеш текущата палитра, с която се рисуват уиджетите и да подадеш на тулбара цвета, който искаш с QWidget::setBackgroundRole [qt-project.org] . Цвета може също да се сложи и с CSSQWidget::setStyle [qt-project.org]

 Signature 

“Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program.”
- Linus Torvalds

April 20, 2012

Mart Mart
Lab Rat
47 posts

Ти изглежда не ме разбра. Искам да взема цвета на заглавната лента на прозореца – там където се изписва името на прозореца (със setWindowTitle), а не цвета на самия прозорец.

В QPalette има всичко друго, но не и този цвят.

Това което мога да направя в момента (много тъпо) е да дам възможност на потребителя да зададе цвета на тулбара, а той с помощта на програма като GIMP да вземе с пипетката цвета на заглавната лента на някой прозорец и да си го сложи. Ама аз искам това да става автоматично, иначе се губи смисъла.

April 20, 2012

task_struct task_struct
Ant Farmer
355 posts

Това ще е сложно… Рамката на прозореца ( поне в Линукс е отделна програма ( мениджър на прозорци – KWin, Metacity и т.н ) ) така, че тя има отделни настройки, до които не мисля, че твоята програма има директен достъп. Може би ще можеш да вземеш цветовете от някаква библиотека, предоставена от мениджъра. Проблема е, че ще трябва да имплементираш такава възможност за всеки мениджър, който може да работи в момента. Друг проблем, че в Линукс мениджъра може да се подменя динамично по време на работа. Така, че може твоята програма да е пусната и да работи KWin, но някой после да го смени на Beryl. Поне за сега не се сещам за някакво лесно решение. Ако ми хрумне нещо ще пиша :)

 Signature 

“Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program.”
- Linus Torvalds

April 20, 2012

Mart Mart
Lab Rat
47 posts

Емиии…
Зарежи.

Между другото, Скайпа си има собствена рамка поне под Windows. Това как се прави? Знам че Скайпа е написан на Qt.
Ама тоя въпрос само между другото – нямам намерение да правя такива неща, така че да не вземеш да се ровиш сега да търсиш как става…

April 20, 2012

task_struct task_struct
Ant Farmer
355 posts

Във Windows е малко по-различно. Там приложението има някъв начин да си русива само рамката или да остави Windows-а да си нарисува тази по подразбиране. Това обаче става с библиотеките на Уина. Qt не съм сигурен дали предоставя тази опция, защото не е мултиплатформена.

Има начин да кажеш на прозореца, че не искаш рамка. И да си направиш нещо като рамка сам. ( Това го прави Хрома-а, примерно, под Линукс )

 Signature 

“Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program.”
- Linus Torvalds

April 20, 2012

Mart Mart
Lab Rat
47 posts

Това последното май е начина – да си я нарисуваш сам.
Напоследък се наблюдава една тенденция програмите да си имат собствени рамки. Скайп, Хром, Мозилата, Фотошоп, Илюстратор, Индизайн…
Indesign
… дори Майкрософт започнаха здраво да използват рамката за нестандартни неща като сложиха в нея бутони, менютa, табове на тулбарове и какво ли не (май-май почти всички продукти на MS са вече със собствени нестандартни рамки)…

Според мен това има нещо общо с мобилните устройства с малки екрани – за да се пести място. Изглежда почнаха да се усещат че заглавната лента е една голяма неизползваема земя и почнаха да я орат и нея.

Така че тази тема един ден може да стане доста актуална. Затова ако някой случайно попадне на Qt програмка рисуваща собствена рамка да свирне.

Като се замисля това би решило моя проблем, защото може да се нарисува рамката, под нея да е тулбара, който да е в същия цвят и да преливат, после да се зададе полупрозрачност и да стане много яко (като в КДЕ). Само дето не знам как може да се направи всички останали компоненти да не наследяват тази прозрачност, а да са си нормални.

Друга тенденция е премахването на стандартното меню. Лично мен това много ми допада. Първо самото меню заема много място, второ почти всяко приложение вече има тулбарове и става едно излишно препокриване с менюто. Трето то наистина е неизползваемо в мобилните устройства и налага разлики в интерфейса на един и същи софтуер, пускан на различни машини. Идеята на така нареченото “ribbon menu” ми харесва много – всичко което може да прави програмата се поставя в тулбарове.

April 21, 2012

task_struct task_struct
Ant Farmer
355 posts

Мдаа… Всички искат да си рисуват собствени рамки … На мен не ми допада много, защото става неконсистентно. Всяка програма има различни бутони за затваряне, различен цвят и какво ли още не. Премахването на рамката на KWin (примерно), ме лишава като потребител от всичко, което KWin предлага ( нагласяване на прозрачност, групиране на прозорците, местене за неактивните частни на прозореца и т.н) Примерно аз съм си нагласил при натискане на среден бутон върху рамката, прозореца да се затваря. Това няма как да стане, ако програмата си има своя рамка. Така аз ще имам много приложения, работещи по един начин и едно, което си работи по свой, а това нарушава “user experience”-а .

Иначе има ribbon реализация на Qt. Виж: http://qt-project.org/forums/viewthread/4214

 Signature 

“Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program.”
- Linus Torvalds

April 21, 2012

Mart Mart
Lab Rat
47 posts

За това си напълно прав – че всяка програма си прави каквото си ще и се губят общите действия на рамките. Но това е проблем за Линукс където се дава голяма свобода на потребителя.
На Windows няма такива работи – няма среден бутон да прави каквото му кажеш, няма прилепване на прозорците… абе нищо няма. А и да има начини и настройки, повечето потребители не ги ползват и няма да видят никаква разлика освен във външния вид.

Но каквото и да си говорим – тенденцията е такава и трябва да се свиква с нея. Щом свикнах с левите бутони и таскбар на Убунту и сега постоянно търся нещата у лево… със всичко се свиква :)

April 21, 2012

MaPet MaPet
Lab Rat
27 posts

hmmm…?

August 5, 2012

utcenter utcenter
Ant Farmer
823 posts

Mart wrote:
Емиии…
Зарежи.

Между другото, Скайпа си има собствена рамка поне под Windows. Това как се прави? Знам че Скайпа е написан на Qt.

Само скайп за линукс е написан с Qt. Windows версията най-вероятно е .net

 
  ‹‹ Qt Creator - Autocomplete и разпознаване на класове      [Решен] Phonon ››

You must log in to post a reply. Not a member yet? Register here!