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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Свой заголовок окна и прозрачность.  (Прочитано 14275 раз)
leonike
Гость
« : Апрель 28, 2011, 19:51 »

Собственно задача - написать свой заголовок окна. С функциональной частью проблем не возникло, показываю widget предварительно задав флаг окна FramelessWindowHint, и запускаю экземпляр класса TitleBar (класс заголовка окна).

А проблема в том, что заголовок окна должен быть не прямоугольным, а с закругленными краями, т.е. нужно сделать как-то прозрачность. Гуглеж не дал результатов.
Записан
Denjs
Гость
« Ответ #1 : Апрель 28, 2011, 20:18 »

.setStyleSheet() не? или ваш TitleBar - он не Qt-шный? в ассистанте смотрели перед тем как в гугле рыться?
« Последнее редактирование: Апрель 28, 2011, 20:22 от Denjs » Записан
leonike
Гость
« Ответ #2 : Апрель 28, 2011, 20:22 »

.setStyleSheet() не? или ваш TitleBar - он не Qt-шный? в ассистанте смотрели перед тем как в гугле рыться?

QStyleOptionTitleBar ?

TitleBar конечно кутишный

а какими опциями задавать прозрачность в qss?
закругленность вроде параметр border-radius, но он не срабатывает

И в Assistant смотрел, но ничего не увидел ) Если знаете, ткните носом

Qt 4.7.2
« Последнее редактирование: Апрель 28, 2011, 20:44 от leonike » Записан
SeverusSnape
Гость
« Ответ #3 : Апрель 28, 2011, 20:52 »

Можно и без qss попробовать. Например, как реализовано в QSplashScreen
Записан
leonike
Гость
« Ответ #4 : Апрель 28, 2011, 21:03 »

Вообще что-то подобное можно добиться установив атрибут:

widget.setAttribute(Qt::WA_TranslucentBackground);

Однако все равно визуальный эффект очень далек от идеала.

Можно и без qss попробовать. Например, как реализовано в QSplashScreen
А можно поподробней?
« Последнее редактирование: Апрель 28, 2011, 21:09 от leonike » Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #5 : Апрель 28, 2011, 21:13 »

без композитного оконного менеджера в иксах края будут рваные
Записан
leonike
Гость
« Ответ #6 : Апрель 28, 2011, 21:43 »

без композитного оконного менеджера в иксах края будут рваные
ну собственно заказчику все равно, как в иксах будет выглядеть )

но у меня все равно и в иксах и в винде рвано выглядит, если вы про Qt::WA_TranslucentBackground
Записан
SeverusSnape
Гость
« Ответ #7 : Апрель 28, 2011, 21:56 »

Ну, может быть, как-нибудь так (делал небольшую программку):

Код:
DropArea::DropArea(QWidget* parent)
  : QLabel(parent)
{
  QPixmap splashImage(":/images/globe.png");
  setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::SplashScreen);
  setPixmap(splashImage);
  setMask(splashImage.mask());
}

Где globe.png картинка с закругленными углами. Флаги оставил свои.
Записан
leonike
Гость
« Ответ #8 : Апрель 28, 2011, 22:47 »

Ну, может быть, как-нибудь так (делал небольшую программку):

Код:
DropArea::DropArea(QWidget* parent)
  : QLabel(parent)
{
  QPixmap splashImage(":/images/globe.png");
  setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::SplashScreen);
  setPixmap(splashImage);
  setMask(splashImage.mask());
}

Где globe.png картинка с закругленными углами. Флаги оставил свои.

отлично, спасибо, получилось картинку вывести на экран, буду экспериментировать с моим TitleBar
Записан
SeverusSnape
Гость
« Ответ #9 : Апрель 28, 2011, 23:08 »

О результатах отпишитесь, если не сложно  Улыбающийся
Записан
Denjs
Гость
« Ответ #10 : Апрель 28, 2011, 23:38 »

TitleBar конечно кутишный
o_0  Непонимающий имя класса скажите пожалуйста?
Записан
leonike
Гость
« Ответ #11 : Апрель 28, 2011, 23:54 »

О результатах отпишитесь, если не сложно  Улыбающийся

да идет процесс, но возникла проблема.
нужно скрывать на панели задач одно из окон, ставлю флаг Qt::SplashScreen или Qt::Popup, но в таком случае окно исчезает после нажатия по нему.

o_0  Непонимающий имя класса скажите пожалуйста?

а вы что имели ввиду? я подумал, что кутишный в данном контексте = реализован средствами qt
Записан
SeverusSnape
Гость
« Ответ #12 : Апрель 29, 2011, 00:04 »

Попробуйте сделать вот так: (опять выдержка из кода)

Код:
int main(int argc, char* argv[])
{
  QCoreApplication::setApplicationName("TorgiAdder");

  QApplication a(argc, argv);
  [b]a.setQuitOnLastWindowClosed (false);[/b]
Записан
SeverusSnape
Гость
« Ответ #13 : Апрель 29, 2011, 00:06 »

Насчет флага Qt::Popup не уверен, что он нужен
Записан
leonike
Гость
« Ответ #14 : Апрель 29, 2011, 00:13 »

Насчет флага Qt::Popup не уверен, что он нужен
а как? если не применять его (или Qt::SplashScreen), то на панели задач отображается и titlebar и виджет приложения.
а надо, чтобы только что-то одно.
если кликнуть по виджету с флагом Qt::SplashScreen, то он делает hide, надо этого избежать

либо есть другой флаг, скрывающий окно на пенили задач, либо флаг, предотвращающий hide по клику, либо другие хаки использовать
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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