Насколько я понимаю здесь создается объект палитры – 1 строка, далее фону присваивается синий цвет, а тексту желтый – 2 и 3 строки, а в 4 сроке для виджета txt (текстового редактора) устанавливается палитра pal.
Вопрос следующий: зачем в первой строке мы объекту pal присваиваем txt.palette()? Если первую строку сделать вида: “QPalette pal;”, т.е. просто создать объект палитры, то всё так же работает…
Это сделано для того что бы изменить только указанные значения палитры Base и Text. В противном случае нет гарантий у созданного по умолчанию объекта класса QPalette все значения палитры совпадали бы с палитрой объекта класса QTextEdit. То есть это сделано для того что бы непреднамеренно не изменить некоторые значения палитры объекта txt.
В главе 10, в коде SyntaxHighlighter, в файле main.cpp наткнулся на такую строчку:
new SyntaxHighlighter(txt.document());
Как это работает? Сколько сталкивался с оператором new (ну или placement new), он всегда возвращал указатель на void. Ну т.е. по идее, логично было бы увидеть что-то вроде:
SyntaxHighlighter* highlighter = new SyntaxHighlighter();
highighter->accept(txt.document());
(accept – это отсебятина; понятно, что нет такой функции, я сам подход имею в виду)
Здравствуйте, Макс!
На стр. 167 Листинг 10.5 приведен код функции main(). Там есть строки:
1. QPalette pal = txt.palette();
2. pal.setColor(QPalette::Base, Qt::darkBlue);
3. pal.setColor(QPalette::Text, Qt::yellow);
4. txt.setPalette(pal);
Насколько я понимаю здесь создается объект палитры – 1 строка, далее фону присваивается синий цвет, а тексту желтый – 2 и 3 строки, а в 4 сроке для виджета txt (текстового редактора) устанавливается палитра pal.
Вопрос следующий: зачем в первой строке мы объекту pal присваиваем txt.palette()? Если первую строку сделать вида: “QPalette pal;”, т.е. просто создать объект палитры, то всё так же работает…
Это сделано для того что бы изменить только указанные значения палитры Base и Text. В противном случае нет гарантий у созданного по умолчанию объекта класса QPalette все значения палитры совпадали бы с палитрой объекта класса QTextEdit. То есть это сделано для того что бы непреднамеренно не изменить некоторые значения палитры объекта txt.
Понял, спасибо за разъяснение!
Макс, доброго времени суток!
В главе 10, в коде SyntaxHighlighter, в файле main.cpp наткнулся на такую строчку:
new SyntaxHighlighter(txt.document());
Как это работает? Сколько сталкивался с оператором new (ну или placement new), он всегда возвращал указатель на void. Ну т.е. по идее, логично было бы увидеть что-то вроде:
SyntaxHighlighter* highlighter = new SyntaxHighlighter();
highighter->accept(txt.document());
(accept – это отсебятина; понятно, что нет такой функции, я сам подход имею в виду)
Иначе эта строка makes little sense to me. )