Насколько я понимаю здесь создается объект палитры – 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 – это отсебятина; понятно, что нет такой функции, я сам подход имею в виду)
Разбирал пример из 10 урока и в проекте SyntaxHighlighter, в файле main.cpp наткнулся на такую вот строчку:
new SyntaxHighlighter(txt.document());
Каким образом это работает? Сколько сталкивался с оператором new, он всегда возвращает указатель на участок выделенной динамической памяти в виде void*. И, судя по тому, как обычно выделяется память для виджетов в QT, логично было бы увидеть что-то из серии:
SyntaxHighlighter *shlight = new SyntaxHighlighter;
shlight->load(txt.document());
А вот в случае с: new SyntaxHighlighter(txt.document());
как-то непонятно, где хранится возвращённый указатель на выделенный блок памяти и вообще, первый раз встречаю такую экзотическую форму использования оператора new.
Здравствуйте, Макс!
На стр. 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. )
Макс, добрый день!
Разбирал пример из 10 урока и в проекте SyntaxHighlighter, в файле main.cpp наткнулся на такую вот строчку:
new SyntaxHighlighter(txt.document());
Каким образом это работает? Сколько сталкивался с оператором new, он всегда возвращает указатель на участок выделенной динамической памяти в виде void*. И, судя по тому, как обычно выделяется память для виджетов в QT, логично было бы увидеть что-то из серии:
SyntaxHighlighter *shlight = new SyntaxHighlighter;
shlight->load(txt.document());
А вот в случае с: new SyntaxHighlighter(txt.document());
как-то непонятно, где хранится возвращённый указатель на выделенный блок памяти и вообще, первый раз встречаю такую экзотическую форму использования оператора new.
Заранее спасибо!