Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Alex Custov от Апрель 20, 2010, 02:49



Название: стиль QLineEdit в QComboBox
Отправлено: Alex Custov от Апрель 20, 2010, 02:49
Надо стилизовать QLineEdit внутри QComboBox. И QComboBox и QLineEdit имеют каждый свой стиль.

Код
C++ (Qt)
   QComboBox *bb = new QComboBox;
   QLineEdit *lb = new QLineEdit;
   bb->setDuplicatesEnabled(false);
   bb->setEditable(true);
   bb->setLineEdit(lb);
   bb->addItem("1");
   bb->addItem("2");
   bb->addItem("3");
 
   bb->setStyleSheet("QComboBox{color:cyan}");
   lb->setStyleSheet("QLineEdit{color:magenta}");
   bb->show();
 

Вопрос - почему QLineEdit в итоге стилизуется cyan-ом а не magent-ой? Смахивает на баг.

Qt 4.5.3, Debian Squeeze.


Название: Re: стиль QLineEdit в QComboBox
Отправлено: lit-uriy от Апрель 20, 2010, 10:19
QLineEdit{background-color:magenta}
?


Название: Re: стиль QLineEdit в QComboBox
Отправлено: Alex Custov от Апрель 20, 2010, 12:35
QLineEdit{background-color:magenta}
?

нет, мне нужно установить цвет текста - это задаётся через "color". Если убрать

Код
C++ (Qt)
bb->setStyleSheet("QComboBox{color:cyan}");

то всё работает. Если вернуть, то стиль комбобокса перекрывает стиль lineedit-a.


Название: Re: стиль QLineEdit в QComboBox
Отправлено: Alex Custov от Апрель 20, 2010, 14:41
круто:

http://bugreports.qt.nokia.com/browse/QTBUG-4322

чинить даже не собираются  :D


Название: Re: стиль QLineEdit в QComboBox
Отправлено: SABROG от Апрель 20, 2010, 16:00
нет, мне нужно установить цвет текста
Делайте разницу, у QComboBox нет текста, поэтому это свойство ему не нужно, в то время как текст есть у QLineEdit.

Код
C++ (Qt)
   bb->setStyleSheet("QComboBox {border-radius: 6px; border: 3px solid green;}");
   lb->setStyleSheet("QLineEdit {color: blue}");
 


Название: Re: стиль QLineEdit в QComboBox
Отправлено: Авварон от Апрель 20, 2010, 16:29
ну P2 это высокий приоритет


Название: Re: стиль QLineEdit в QComboBox
Отправлено: Alex Custov от Апрель 20, 2010, 17:41
Делайте разницу, у QComboBox нет текста, поэтому это свойство ему не нужно, в то время как текст есть у QLineEdit.

в QComboBox color используется не только для текста


Название: Re: стиль QLineEdit в QComboBox
Отправлено: lit-uriy от Апрель 20, 2010, 17:57
>>чинить даже не собираются
такого ни где не сказано


Название: Re: стиль QLineEdit в QComboBox
Отправлено: Alex Custov от Апрель 20, 2010, 18:08
>>чинить даже не собираются
такого ни где не сказано

Affects Version/s:   4.5.2
Fix Version/s:   Some future release

уже 4.7 на носу, подвижек нет. Когда тогда это  починят - в 4.9?  :-\


Название: Re: стиль QLineEdit в QComboBox
Отправлено: SABROG от Апрель 20, 2010, 18:09
в QComboBox color используется не только для текста

color это foreground, а foreground это текст. Если нужен цветной квадратик вместо серого виджета, то это background.
Текст в QComboBox присутствует только в двух виджетах: QLineEdit и QListWidget, сам QComboBox лишь играет роль контейнера.


Название: Re: стиль QLineEdit в QComboBox
Отправлено: Alex Custov от Апрель 20, 2010, 18:13
color это foreground, а foreground это текст.

foreground - это слой рисуемый поверх background, более ничего. Использовать цвет foreground-a может любой элемент - хоть текст, хоть dropdown кнопка (как в QComboBox)

QListWidget

там QListView


Название: Re: стиль QLineEdit в QComboBox
Отправлено: SABROG от Апрель 20, 2010, 18:35
foreground - это слой рисуемый поверх background, более ничего. Использовать цвет foreground-a может любой элемент - хоть текст, хоть dropdown кнопка (как в QComboBox)
Тоже не верно:
Код
CSS
QComboBox::down-arrow {color: red;}
 
Не работает. А вот background работает - затирает стрелку напрочь, значит стрелка - не текст, а картинка, а картинка - background. Не понятно почему при этом QComboBox {color: x} меняет цвет стрелки.

там QListView
Не суть важно, писал по памяти, QListWidget тоже на базе QListView...


Название: Re: стиль QLineEdit в QComboBox
Отправлено: lit-uriy от Апрель 20, 2010, 19:12
>>хоть текст
тут меня большие сомнения берут, что установка фона для текста, что-то визуально поменяет.


Название: Re: стиль QLineEdit в QComboBox
Отправлено: Alex Custov от Апрель 20, 2010, 19:42
Не понятно почему при этом QComboBox {color: x} меняет цвет стрелки.

Я говорил именно про это


Название: Re: стиль QLineEdit в QComboBox
Отправлено: SABROG от Апрель 20, 2010, 20:10
Не понятно почему при этом QComboBox {color: x} меняет цвет стрелки.

Я говорил именно про это

Вопрос звучал так:
Цитировать
Вопрос - почему QLineEdit в итоге стилизуется cyan-ом а не magent-ой?

Я говорю о том, что в этом случае вообще нет никакого смысла использовать свойство color для QComboBox, так как у него само нет текста, значит надо стилизовать QLineEdit. Поэтому ответом на твой вопрос будет нечто вроде "просто вы не умеете его готовить". А вот то, что меняется цвет стрелки и текста в QLineEdit на изменение color для QComboBox и не меняется для QComboBox::down-arrow - ИМХО баг. По нормальному, изменение свойства color для QComboBox вообще ничего не должно менять, а у QComboBox должен появится дополнительный sub-control типа QComboBox::line-edit свойства которого и надо было бы менять.


Название: Re: стиль QLineEdit в QComboBox
Отправлено: Alex Custov от Апрель 20, 2010, 20:43
Я говорю о том, что в этом случае вообще нет никакого смысла использовать свойство color для QComboBox, так как у него само нет текста

фига в том, что этот цвет унаследуют и linedit и listview - тебе не надо стилизовать их отдельно. Проблема в том, что когда ты захочешь стилизовать их отдельно, получится что комбобокс мешает нормальной стилизации lineedit-a. Видимо придётся оставить задачу что я хотел сделать на потом.


Название: Re: стиль QLineEdit в QComboBox
Отправлено: SABROG от Апрель 20, 2010, 23:44
Покажи в виде style sheets как ты хочешь реализовать свою стилизацию. Мне например QComboBox не мешает стилизовать отдельно QLineEdit.


Название: Re: стиль QLineEdit в QComboBox
Отправлено: Alex Custov от Апрель 21, 2010, 00:25
Код
C++ (Qt)
#include <QApplication>
#include <QVBoxLayout>
#include <QComboBox>
#include <QLineEdit>
 
int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
 
   // QLineEdit с красным bold текстом
   app.setStyleSheet(
   "QLineEdit { color: red; font-weight: bold; }"
   );
 
   QWidget *w = new QWidget;
   QVBoxLayout *vb = new QVBoxLayout;
   w->setLayout(vb);
 
   QComboBox *bb = new QComboBox(w);
   QLineEdit *lb = new QLineEdit(bb);
   bb->setDuplicatesEnabled(false);
   bb->setEditable(true);
 
   // стиль не работает
   bb->setLineEdit(lb);
 
   bb->addItem("1");
   bb->addItem("2");
   bb->addItem("3");
 
   vb->addWidget(bb);
 
   w->resize(100, 60);
   w->show();
 
   // стиль работает
   QLineEdit *test = new QLineEdit;
   test->show();
 
   return app.exec();
}
 

скрин в аттаче. Qt 4.6.2


Название: Re: стиль QLineEdit в QComboBox
Отправлено: SABROG от Апрель 21, 2010, 08:31
Если родителя у QLineEdit убрать, то цвет текста становится красным, но почему-то не жирным. В общем дело темное, надо писать запрос, чтобы добавили возможность ставить стиль отдельному sub-control'у типа line-edit.