Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: daimon от Май 10, 2012, 04:02



Название: [РЕШЕНО] QSplitter stylesheet on QWidget
Отправлено: daimon от Май 10, 2012, 04:02
Код:
QMainWindow::separator::vertical { 
background :qlineargradient(spread:pad, x1:0.993909, y1:0.455, x2:0, y2:0.511, stop:0 rgba(172, 172, 172, 255), stop:1 rgba(255, 255, 255, 255));
width: 5px; /* when vertical */
height: 5px; /* when horizontal */

border-radius: 2px;
}

QMainWindow::separator:hover::vertical {
background:qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(102, 102, 102, 255), stop:1 rgba(255, 255, 255, 255));
}
стилизуется сплиттер между доквиджетом и центральным виджетом
как застилизовать сплиттер для такого случая?


Название: Re: QSplitter stylesheet on QWidget
Отправлено: daimon от Май 10, 2012, 04:15
Код:
QSplitter::handle { 
background :qlineargradient(spread:pad, x1:0.993909, y1:0.455, x2:0, y2:0.511, stop:0 rgba(172, 172, 172, 255), stop:1 rgba(255, 255, 255, 255));
width: 5px; /* when vertical */
height: 5px; /* when horizontal */

border-radius: 2px;
}

QSplitter::handle:hover {
background:qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(102, 102, 102, 255), stop:1 rgba(255, 255, 255, 255));
}

в дизайнере наведение на сплиттер срабатывает и меняет цвет хендлера, а в предпросмотре и приложении нет. В чём проблема?

P.S. не работает свойство hover!!!


Название: Re: QSplitter stylesheet on QWidget
Отправлено: Bepec от Май 10, 2012, 07:33
QSplitterHandle
{
background-color: qlineargradient(spread:repeat, x1:0.3235, y1:0.545, x2:0.21, y2:0.545455, stop:0 rgba(0, 0, 0, 255), stop:1 rgba(255, 255, 255,255));
width: 5px;
height: 5px;
}


Название: Re: QSplitter stylesheet on QWidget
Отправлено: daimon от Май 10, 2012, 11:47
QSplitterHandle
{
background-color: qlineargradient(spread:repeat, x1:0.3235, y1:0.545, x2:0.21, y2:0.545455, stop:0 rgba(0, 0, 0, 255), stop:1 rgba(255, 255, 255,255));
width: 5px;
height: 5px;
}

этот вариант работает для всех состояний сплиттера, а я ещё хочу прописать ещё состояние, когда получает управление сплиттер (hover) и менять тогда фон сплиттера - заливать его других градиентом) - навёл мышь и другой цвет
почему нет свойства hover или я его неправильно прописываю?


Название: Re: QSplitter stylesheet on QWidget
Отправлено: V1KT0P от Май 10, 2012, 11:54
почему нет свойства hover или я его неправильно прописываю?
Посмотри в справке "Qt Style Sheets Reference", там ничего про поддержку hover в QSplitter нету.


Название: Re: QSplitter stylesheet on QWidget
Отправлено: daimon от Май 10, 2012, 13:00
почему нет свойства hover или я его неправильно прописываю?
Посмотри в справке "Qt Style Sheets Reference", там ничего про поддержку hover в QSplitter нету.

а что тогда вот это может быть и ставить сплиттеру между доквиджетом и mdi областью

Код:
QMainWindow::separator::vertical { 
background :qlineargradient(spread:pad, x1:0.993909, y1:0.455, x2:0, y2:0.511, stop:0 rgba(172, 172, 172, 255), stop:1 rgba(255, 255, 255, 255));
width: 5px; /* when vertical */
height: 5px; /* when horizontal */

border-radius: 2px;
}

QMainWindow::separator:hover::vertical {
background:qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(102, 102, 102, 255), stop:1 rgba(255, 255, 255, 255));
}

и ещё самое странное, что стиль с hover применяется и показывается при редактировании в дизайнере, а при предпросмотре его уже нет
заметил, что такое видно в Qt4.8.0, в Qt 4.7.0 свойство не применяется вообще


Название: Re: QSplitter stylesheet on QWidget
Отправлено: Bepec от Май 10, 2012, 14:38
Интересная фигня. Действительно, разнится результат. Конечно мб это из-за библиотек какой то косяк.ммм..

Ответ найден - баг в Qt, ещё с 4.6 4.7

Обходится -
Код:
QSplitterHandle:hover {}  QSplitter::handle:horizontal:hover {background-color:red;}

Баг репорт : https://bugreports.qt-project.org/browse/QTBUG-13768?page=com.atlassian.streams.streams-jira-plugin%3Aactivity-stream-issue-tab

update: решение найдено за 5 минут. Хе хе хе.


Название: Re: QSplitter stylesheet on QWidget
Отправлено: daimon от Май 10, 2012, 19:39
Код:
QSplitter::handle { 
background :qlineargradient(spread:pad, x1:0.993909, y1:0.455, x2:0, y2:0.511, stop:0 rgba(172, 172, 172, 255), stop:1 rgba(255, 255, 255, 255));
width: 5px;
height: 5px;

border-radius: 2px;
}
QSplitterHandle::hover{}
QSplitter::handle:horizontal:hover {background:qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(102, 102, 102, 255), stop:1 rgba(255, 255, 255, 255));}

вот этот код смущает
Код:
QSplitterHandle::hover{}

но всё работает как надо, спс