Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: ритт от Февраль 08, 2009, 00:56



Название: [4.4-4.5][РЕШЕНО] QComboBox::setLineEdit(le) - что с палитрой le?
Отправлено: ритт от Февраль 08, 2009, 00:56
Код:
QLineEmit* le = new QLineEmit(this);
qDebug() << le->palette().brush(QPalette::Disabled, QPalette::Text).color();
//QColor(ARGB 1, 0.462745, 0.454902, 0.423529)

QComboBox* combo = new QComboBox(this);
combo->setEditable(true);
combo->setLineEdit(le);
qDebug() << le->palette().brush(QPalette::Disabled, QPalette::Text).color();
//QColor(ARGB 1, 0, 0, 0)
не пойму почему так происходит. сам палитру не меняю, стиль у комбы тот же, что и у лайнэдита...

глубоко код не рыл, но при беглом осмотре ничего подозрительного не обнаруживается:
Код:
void QComboBox::setLineEdit(QLineEdit *edit)
{
//...
    edit->setText(currentText());
    d->lineEdit = edit;
    if (d->lineEdit->parent() != this)
d->lineEdit->setParent(this);
    d->lineEdit->setFrame(false);
    d->lineEdit->setContextMenuPolicy(Qt::NoContextMenu);
    d->lineEdit->setFocusProxy(this);
    d->lineEdit->setAttribute(Qt::WA_MacShowFocusRect, false);
//...
    if (isVisible())
        d->lineEdit->show();
}

есть идеи?


Название: Re: [4.4-4.5] QComboBox::setLineEdit(le) - что с палитрой le?
Отправлено: BRE от Февраль 08, 2009, 09:40
У меня все нормально.
Qt4.4.3
Код
C++ (Qt)
MainWindow::MainWindow( QWidget *parent )
: QDialog( parent )
{
QLineEdit* le = new QLineEdit(this);
qDebug() << le->palette().brush(QPalette::Disabled, QPalette::Text).color();
//QColor(ARGB 1, 0.462745, 0.454902, 0.423529)
 
QComboBox* combo = new QComboBox(this);
combo->setEditable(true);
combo->setLineEdit(le);
qDebug() << le->palette().brush(QPalette::Disabled, QPalette::Text).color();
//QColor(ARGB 1, 0, 0, 0)
}
 

Выдает:
Код:
QColor(ARGB 1, 0.494118, 0.490196, 0.486275) 
QColor(ARGB 1, 0.494118, 0.490196, 0.486275)


Название: Re: [4.4-4.5] QComboBox::setLineEdit(le) - что с палитрой le?
Отправлено: lit-uriy от Февраль 08, 2009, 13:37
Я так понимаю у Константина свой класс "QLineEmit", может как раз в нем собака и порылась?


Название: Re: [4.4-4.5] QComboBox::setLineEdit(le) - что с палитрой le?
Отправлено: pastor от Февраль 08, 2009, 18:30
Проверил и я.


Цитировать
QColor(ARGB 1, 0.466667, 0.466667, 0.466667)
QColor(ARGB 1, 0.466667, 0.466667, 0.466667)


Qt 4.4.3,
Windows XP x64
openSuse 11.0


Название: Re: [4.4-4.5] QComboBox::setLineEdit(le) - что с палитрой le?
Отправлено: ритт от Февраль 08, 2009, 18:33
"QLineEmit" - это просто опечатка :)
извиняюсь за то, что ввёл в заблуждение, не проверив сразу тестовый пример - как раз в нём всё нормально...

а вот проверенный пример:
Код
C++ (Qt)
class MyLineEdit : public QLineEdit
{
Q_OBJECT
 
public:
explicit MyLineEdit(QWidget* parent = 0);
 
protected:
void paintEvent(QPaintEvent* event);
};
 
MyLineEdit::MyLineEdit(QWidget* parent) : QLineEdit(parent)
{
}
 
void MyLineEdit::paintEvent(QPaintEvent* event)
{
qDebug() << "MyLineEdit::paintEvent:" << palette().brush(QPalette::Disabled, QPalette::Text).color();
//QColor(ARGB 1, 0, 0, 0)
QLineEdit::paintEvent(event);
qDebug() << "MyLineEdit::paintEvent:" << palette().brush(QPalette::Disabled, QPalette::Text).color();
//QColor(ARGB 1, 0, 0, 0)
}
 
//...
 
MyLineEdit* le = new MyLineEdit(this);
qDebug() << le->palette().brush(QPalette::Disabled, QPalette::Text).color();
//QColor(ARGB 1, 0.462745, 0.454902, 0.423529)
 
QComboBox* combo = new QComboBox(this);
combo->setEditable(true);
combo->setLineEdit(le);
qDebug() << le->palette().brush(QPalette::Disabled, QPalette::Text).color();
//QColor(ARGB 1, 0.462745, 0.454902, 0.423529)
 


Название: Re: [4.4-4.5] QComboBox::setLineEdit(le) - что с палитрой le?
Отправлено: BRE от Февраль 08, 2009, 18:50
Константин, у меня все равно нормально.  :)  ???
Цитировать
QColor(ARGB 1, 0.494118, 0.490196, 0.486275)
QColor(ARGB 1, 0.494118, 0.490196, 0.486275)
MyLineEdit::paintEvent: QColor(ARGB 1, 0.494118, 0.490196, 0.486275)
MyLineEdit::paintEvent: QColor(ARGB 1, 0.494118, 0.490196, 0.486275)
...
Fedora 10
Qt 4.4.3-10


Название: Re: [4.4-4.5] QComboBox::setLineEdit(le) - что с палитрой le?
Отправлено: pastor от Февраль 08, 2009, 18:56
Эммм...

Цитировать
QColor(ARGB 1, 0.415686, 0.407843, 0.392157)
QColor(ARGB 1, 0.415686, 0.407843, 0.392157)
MyLineEdit::paintEvent: QColor(ARGB 1, 0.415686, 0.407843, 0.392157)
MyLineEdit::paintEvent: QColor(ARGB 1, 0.415686, 0.407843, 0.392157)
MyLineEdit::paintEvent: QColor(ARGB 1, 0.415686, 0.407843, 0.392157)
MyLineEdit::paintEvent: QColor(ARGB 1, 0.415686, 0.407843, 0.392157)
MyLineEdit::paintEvent: QColor(ARGB 1, 0.415686, 0.407843, 0.392157)
MyLineEdit::paintEvent: QColor(ARGB 1, 0.415686, 0.407843, 0.392157)
MyLineEdit::paintEvent: QColor(ARGB 1, 0.415686, 0.407843, 0.392157)
MyLineEdit::paintEvent: QColor(ARGB 1, 0.415686, 0.407843, 0.392157)
MyLineEdit::paintEvent: QColor(ARGB 1, 0.415686, 0.407843, 0.392157)
MyLineEdit::paintEvent: QColor(ARGB 1, 0.415686, 0.407843, 0.392157)
MyLineEdit::paintEvent: QColor(ARGB 1, 0.415686, 0.407843, 0.392157)
MyLineEdit::paintEvent: QColor(ARGB 1, 0.415686, 0.407843, 0.392157)
MyLineEdit::paintEvent: QColor(ARGB 1, 0.415686, 0.407843, 0.392157)
MyLineEdit::paintEvent: QColor(ARGB 1, 0.415686, 0.407843, 0.392157)
MyLineEdit::paintEvent: QColor(ARGB 1, 0.415686, 0.407843, 0.392157)
MyLineEdit::paintEvent: QColor(ARGB 1, 0.415686, 0.407843, 0.392157)

Мож выложишь минимальный пример?


Название: Re: [4.4-4.5] QComboBox::setLineEdit(le) - что с палитрой le?
Отправлено: ритт от Февраль 08, 2009, 21:25
охренеть!
я тестировал свой виджет, вставляя его в код examples/tools/regexp. сделал минималистичное тестовое приложение - с палитрой всё в порядке. стал сравнивать что там в диалоге regexp такого, чего нет в минималистичном - и вот:
Код:
 	QPalette palette = patternComboBox->palette();
QColor c(Qt::red);
if(rx.isValid())
c = textEdit->palette().color(QPalette::Text);
palette.setColor(QPalette::Text, c);
patternComboBox->setPalette(palette);
как видно из данного сниппета, вне зависимости от валидности rx комбе устанавливается цвет текста из другого лайнэдита (ну, чтобы не хранить его отдельно, обновляя при смене стиля/палитры и т.п.). так вот, в этом коде крошечный недочёт - цвет устанавливается для ВСЕХ групп роли QPalette::Text, а не только для группы QPalette::Active. т.о. при валидности rx для групп текста комбы устанавливается цвет активного текста - т.е. чёрный (1, 0, 0, 0)!
исправил на
Код:
	QPalette palette = patternComboBox->palette();
QColor c(Qt::red);
if(rx.isValid())
c = textEdit->palette().color(QPalette::Active, QPalette::Text);
palette.setColor(QPalette::Active, QPalette::Text, c);
patternComboBox->setPalette(palette);
и всё зажужжало :)

только вчера глубоко ковырял код в поисках неопределённой баги...и нашёл её в конце-концов - гнусная маленькая бага...и тут уже думал, что опять наткнулся на какие-то недокументированные грабли...но обошлось :)

откликнувшихся благодарю за участие.
ветку под снос?


Название: Re: [4.4-4.5] QComboBox::setLineEdit(le) - что с палитрой le?
Отправлено: lit-uriy от Февраль 08, 2009, 22:49
>ветку под снос?
ну вроде ничего поучительного нет, разве что "проверяйте то что сделали до вас"
я три дня заигрывал с примером qsqlbrowser, с не здравым поведением табличного представления, которое в коде "настроил под себя" и только сегодня я обнаружил наличие неподходящего свойства, настроенного в дизайнере трольтеховцами :)


Название: Re: [4.4-4.5] QComboBox::setLineEdit(le) - что с палитрой le?
Отправлено: ритт от Февраль 09, 2009, 00:01
гут. завтра ветку снесу. посмотрим, примут ли "исправление" )

lit-uriy, отпишись по поводу "неподходящего свойства" - хоть и мелочь, но неприятно же )


Название: Re: [4.4-4.5][РЕШЕНО] QComboBox::setLineEdit(le) - что с палитрой le?
Отправлено: lit-uriy от Февраль 09, 2009, 00:21
смешно сказать:
selectionBehavior был в режиме выделения строки, но в коде-то этого нет, однако другие свойства представления настроены были в коде, я скопировал из своей программы настройки представления и модели, ожидая, что сейчас все будет работать также, как и в моей программе.

Башку сломал, почему строка выделяется? :)


Название: Re: [4.4-4.5][РЕШЕНО] QComboBox::setLineEdit(le) - что с палитрой le?
Отправлено: ритт от Февраль 09, 2009, 04:37
во-во! тоже ведь твёрдо знаю, что нигде палитру не меняю. сунул виджет в тестовый диалог, а там ерунда какая-то...
разница только в том, что я накануне потратил кучу времени на отлов нового /* дла меня */ бага, как раз связанного с рисованием...и поспешно решил, что это тоже что-то багоподобное :)

нзови файл и строку - завтра заодно спрошу. по идее, баги и недочёты в примерах также должны рассматриваться и исправляться...


Название: Re: [4.4-4.5][РЕШЕНО] QComboBox::setLineEdit(le) - что с палитрой le?
Отправлено: lit-uriy от Февраль 09, 2009, 09:37
я ручками правил:
browser.cpp -> void Browser::showTable(const QString &t)
(для Qt 4.3.5 стр. 147)
а в дизайнере:
browserwidget.ui -> table (QTableView) -> selectionBehavior


Название: Re: [4.4-4.5][РЕШЕНО] QComboBox::setLineEdit(le) - что с палитрой le?
Отправлено: lit-uriy от Февраль 09, 2009, 09:45
2 Константин, коль уж у тролей спрашивать собираешся, спроси за одно и про эту штуку (http://www.forum.crossplatform.ru/index.php?showtopic=2109). Это я все с тем примером ковырялся и внутря Qtей залез


Название: Re: [4.4-4.5][РЕШЕНО] QComboBox::setLineEdit(le) - что с палитрой le?
Отправлено: ритт от Февраль 09, 2009, 10:17
не спрошу :)
/* ответил на пост по ссылке */


Название: Re: [4.4-4.5][РЕШЕНО] QComboBox::setLineEdit(le) - что с палитрой le?
Отправлено: lit-uriy от Февраль 09, 2009, 10:57
ага, спасибо