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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Метод безымянного объекта  (Прочитано 5375 раз)
Flakes
Гость
« : Март 22, 2008, 16:28 »

Думаю это самый подходящий раздел для вопроса.

Я хотел бы не объявляя явно объект (вроде такие называются безымянными) добраться до его свойств через метод и изменить их. Или другими словами создав безымянный объект сразу выполнить его метод. Есть кусок:

Код:
QTextEdit Notes;
...
QFont font;
font.setBold(true);
Notes->setCurrentFont(font);

хотелось бы его сократить например до
Код:
...
Notes->setCurrentFont(QFont().setBold(true));

или сделать так:
Код:
QFont * font = new QFont().setBold(true);

но проблема в том что метод void QFont::setBold ( bool enable ) возвращает void, и в первом варианте на это ругается.

В Java это делается без проблем... и так и выглядело бы
Код:
new QFont().setBold(true); 

может каким то образом можно впихнуть setBold() в параметр конструктора?
Записан
vregess
Гость
« Ответ #1 : Март 22, 2008, 21:09 »

Хотелось бы поинтересоваться, зачем это надо.
Записан
Flakes
Гость
« Ответ #2 : Март 23, 2008, 02:49 »

просто у меня страсть к минимализму...
Записан
vregess
Гость
« Ответ #3 : Март 23, 2008, 10:12 »

ну можешь сделать обертку для интересующего класса, которая будет выполнять нужную инициализацию или там макрос придумать...

ИМХО в контексте с++ запись вида
Код:
QTextEdit Notes;
...
QFont font;
font.setBold(true);
Notes->setCurrentFont(font);

как раз и будет считаться "минимализмом".

А код вида
Код:
Notes->setCurrentFont(QFont().setBold(true));
лишь нагромождением.

Первый пример читать удобнее.

используй asm, если уж такая тяга к минимализму)

скорее всего такое сделать низя, по крайней мере мне не встречалось решение.
Записан
Tonal
Гость
« Ответ #4 : Март 24, 2008, 08:17 »

Код:
inline QFint setBold(QFont fnt, bool isBold) {
  fnt.setBold(isBold);
  return fnt;
}
...
  Notes->setCurrentFont(setBold(QFont(), true));
...
Записан
Flakes
Гость
« Ответ #5 : Март 24, 2008, 11:52 »

Код:
inline QFint setBold(QFont fnt, bool isBold) {
  fnt.setBold(isBold);
  return fnt;
}
...
  Notes->setCurrentFont(setBold(QFont(), true));
...

это конечно вариант, но немного утрированный. Все равно спасибо всем!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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