Russian Qt Forum
Ноябрь 26, 2024, 20:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: [4.4-4.5][РЕШЕНО] QComboBox::setLineEdit(le) - что с палитрой le?  (Прочитано 8634 раз)
ритт
Гость
« : Февраль 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();
}

есть идеи?
« Последнее редактирование: Февраль 09, 2009, 00:02 от Константин » Записан
BRE
Гость
« Ответ #1 : Февраль 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)
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #2 : Февраль 08, 2009, 13:37 »

Я так понимаю у Константина свой класс "QLineEmit", может как раз в нем собака и порылась?
Записан

Юра.
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Февраль 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
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
ритт
Гость
« Ответ #4 : Февраль 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)
 
Записан
BRE
Гость
« Ответ #5 : Февраль 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
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #6 : Февраль 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)

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

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
ритт
Гость
« Ответ #7 : Февраль 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);
и всё зажужжало Улыбающийся

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

откликнувшихся благодарю за участие.
ветку под снос?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #8 : Февраль 08, 2009, 22:49 »

>ветку под снос?
ну вроде ничего поучительного нет, разве что "проверяйте то что сделали до вас"
я три дня заигрывал с примером qsqlbrowser, с не здравым поведением табличного представления, которое в коде "настроил под себя" и только сегодня я обнаружил наличие неподходящего свойства, настроенного в дизайнере трольтеховцами Улыбающийся
Записан

Юра.
ритт
Гость
« Ответ #9 : Февраль 09, 2009, 00:01 »

гут. завтра ветку снесу. посмотрим, примут ли "исправление" )

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

Сообщений: 3880


Просмотр профиля WWW
« Ответ #10 : Февраль 09, 2009, 00:21 »

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

Башку сломал, почему строка выделяется? Улыбающийся
Записан

Юра.
ритт
Гость
« Ответ #11 : Февраль 09, 2009, 04:37 »

во-во! тоже ведь твёрдо знаю, что нигде палитру не меняю. сунул виджет в тестовый диалог, а там ерунда какая-то...
разница только в том, что я накануне потратил кучу времени на отлов нового /* дла меня */ бага, как раз связанного с рисованием...и поспешно решил, что это тоже что-то багоподобное Улыбающийся

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

Сообщений: 3880


Просмотр профиля WWW
« Ответ #12 : Февраль 09, 2009, 09:37 »

я ручками правил:
browser.cpp -> void Browser::showTable(const QString &t)
(для Qt 4.3.5 стр. 147)
а в дизайнере:
browserwidget.ui -> table (QTableView) -> selectionBehavior
Записан

Юра.
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #13 : Февраль 09, 2009, 09:45 »

2 Константин, коль уж у тролей спрашивать собираешся, спроси за одно и про эту штуку. Это я все с тем примером ковырялся и внутря Qtей залез
Записан

Юра.
ритт
Гость
« Ответ #14 : Февраль 09, 2009, 10:17 »

не спрошу Улыбающийся
/* ответил на пост по ссылке */
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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