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

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

Страниц: 1 [2] 3 4   Вниз
  Печать  
Автор Тема: Qt 4.7 или 5.  (Прочитано 21425 раз)
Susenin
Новичок

Offline Offline

Сообщений: 35


Просмотр профиля
« Ответ #15 : Декабрь 29, 2014, 02:22 »

Код:
Новый синтаксис signal/slot, с проверкой на стадии компиляции.

Сомнительная вещь, да и область применения очень узкая - когда сигнатуры сигналов/слотов совпадают 1:1 и нет перекрытых сигналов/слотов.

Обойти оба случая можно, просто будет не очень красиво.
Перегруженные сигналы.
Код
C++ (Qt)
connect(ui->spinBox, static_cast<void(QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged), this, &MySuperClass::setFactor);
 

Несовпадение сигнатур.
Код
C++ (Qt)
connect(ui->comboBox, &QComboBox::currentTextChanged, [this](const QString & text) { updateText(); });
 

Зато преимущества нового подхода очевидны - не нужно проверять на работоспособность каждое соединение сигнал/слот в приложении.
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #16 : Декабрь 29, 2014, 20:45 »

В пятерке пофиксили визуальный баг с квадратной дыркой в скролле под Win8, только ради этого уже можно перейти  Смеющийся
Записан

Гугль в помощь
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #17 : Декабрь 30, 2014, 23:58 »

Мне наоборот интересно, почему люди держаться за Qt4?

Шустрее работает. Когда скорость важна, а приложению не нужны печеньки, то я и от 4.2.1 не откажусь.
Меньше вес, шустрее ворочается.
Хотя надо смотреть, что там требуется.
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #18 : Январь 01, 2015, 14:40 »

Мне наоборот интересно, почему люди держаться за Qt4?

Шустрее работает. Когда скорость важна, а приложению не нужны печеньки, то я и от 4.2.1 не откажусь.
Меньше вес, шустрее ворочается.
Хотя надо смотреть, что там требуется.

Ну вот как раз с разницей в скорости можно поспорить. Если не сравнивать Quick в Qt4 и Qt5, то в остальном там мало что изменилось. Просто была проведена работа по разделению Qt4 на большее количество модулей. Во всяком случае это совсем не такая разница, как между Qt3 и Qt4.

Более того, если нужна консольная утилита, например, для обработки картинок, то теперь можно не тащить за собой весь GUI с виджетами как в четверке.

Я считаю что всё это держание за Qt4 ретроградством если нет реальных проблем с переходом на Qt5.
Записан

Гугль в помощь
Bepec
Гость
« Ответ #19 : Январь 01, 2015, 15:24 »

А зачем для консоли для обработки картинок тянуть с собой всё UI? Отродясь такого в Qt не видывал, тем более в 4 Веселый
Записан
Akon
Гость
« Ответ #20 : Январь 02, 2015, 00:27 »

Код:
Новый синтаксис signal/slot, с проверкой на стадии компиляции.

Сомнительная вещь, да и область применения очень узкая - когда сигнатуры сигналов/слотов совпадают 1:1 и нет перекрытых сигналов/слотов.
имхо, это одно из основных достоинств пятерки. Из, может быть, неочевидного - повышенная сторогость дизайна: пусть вы имеете указатель на констант. объект: const AnObject* obj, тогда в старой реализации вы все равно можете подписаться на любой сигнал данного объекта, потому что MOC кладет на константность, а в новой реализации - нет, только константные сигналы вам доступны.
Записан
Bepec
Гость
« Ответ #21 : Январь 02, 2015, 01:38 »

Мне кажется или какой то бред написан?
Как сигнал может быть константным? Сигнал уже по определению константен, ибо он не может быть издан извне объекта и не может поменять ничего...

Ну или чего то я в этой жизни не понимаю.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #22 : Январь 02, 2015, 21:19 »

Bepec
Во-первых, сигналы неконcтантны (зачем кидать сигнал из конст метода?)

Akon
Во-вторах, QObject::connect всегда принимает константный указатель на объект (так как сам connect не меняет видимое состояние объекта)
Записан
Bepec
Гость
« Ответ #23 : Январь 02, 2015, 21:26 »

Сигнал же не изменяет состояние своего объекта , следовательно является константным.

Откуда не кинешь сигнал, он не изменит состояния объекта. Следовательно изменить какие либо данные в объекте не может.
"Константный метод гарантирует, что мы не изменим состояние класса в процессе его работы." ©
« Последнее редактирование: Январь 02, 2015, 21:39 от Bepec » Записан
Akon
Гость
« Ответ #24 : Январь 02, 2015, 21:37 »

Цитировать
Во-вторах, QObject::connect всегда принимает константный указатель на объект (так как сам connect не меняет видимое состояние объекта)
Это как-то противоречит моей мысли?

Вот пара функций из QVector:
Код:
T &	operator[] ( int i )
const T & operator[] ( int i ) const

Если эту логику экстраполировать на сигналы, то было бы как-то так:
Код:
void itemChanged(T& item);
void itemChanged(const T& item) const;

« Последнее редактирование: Январь 02, 2015, 21:46 от Akon » Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2094



Просмотр профиля
« Ответ #25 : Январь 02, 2015, 21:49 »

"Константный метод гарантирует, что мы не изменим состояние класса в процессе его работы." ©
Нет, на самом деле не гарантирует.. (и не класса, а объекта)

Код
C++ (Qt)
struct object
{
   void some_method() const {  ++val; }
   mutable int val;
};
 
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Bepec
Гость
« Ответ #26 : Январь 02, 2015, 21:52 »

Вы сейчас хитросмудрили, а я говорю про общий случай, а не частный.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #27 : Январь 02, 2015, 23:40 »

Сигнал же не изменяет состояние своего объекта , следовательно является константным.

Откуда не кинешь сигнал, он не изменит состояния объекта. Следовательно изменить какие либо данные в объекте не может.
"Константный метод гарантирует, что мы не изменим состояние класса в процессе его работы." ©

Сигнал - это уведомление об ИЗМЕНЕНИИ видимого состояния объекта. Т.е. он ВСЕГДА зовется из не-конст ф-ии. При этом, в слоте, законнекченном на сигнал, мы можем поменять sender()'a. Я уж молчу что сигнал - это вызов QMetaObject::activate(QObject *sender...) к-ый принимает неконстантный this.

Это как-то противоречит моей мысли?

Вот пара функций из QVector:
Код:
T &	operator[] ( int i )
const T & operator[] ( int i ) const

Если эту логику экстраполировать на сигналы, то было бы как-то так:
Код:
void itemChanged(T& item);
void itemChanged(const T& item) const;

Простите, ШТО? const T &   QVector<T>::operator[] ( int i ) const не меняет объект, какой нафиг itemChanged?
Записан
Bepec
Гость
« Ответ #28 : Январь 03, 2015, 03:08 »

Сигнал САМ ПО СЕБЕ  ничего изменить в объекте не может. Вот тупо не может.
Он не может изменить объект класса никак, никоим образом. А откуда его вызывать значения не имеет.

Приведите мне пример изменение объекта класса при помощи сигнала (только сигнала) Улыбающийся


PS
Сигнал - это уведомление об ИЗМЕНЕНИИ видимого состояния объекта. Т.е. он ВСЕГДА зовется из не-конст ф-ии. При этом, в слоте, законнекченном на сигнал, мы можем поменять sender()'a. Я уж молчу что сигнал - это вызов QMetaObject::activate(QObject *sender...) к-ый принимает неконстантный this.
Сигнал это метод не изменяющий видимого состояния объекта. А кем и когда он зовётся, не имеет значения. Сигнал НЕ МОЖЕТ изменить объект, повторюсь. Он лишь извещает о чем либо с какими либо аргументами. А вот уже в слоте можно и получить объект класса и изменить, но СЛОТ это не СИГНАЛ Улыбающийся
« Последнее редактирование: Январь 03, 2015, 03:11 от Bepec » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #29 : Январь 03, 2015, 09:20 »

Сигнал САМ ПО СЕБЕ  ничего изменить в объекте не может. Вот тупо не может.
Он не может изменить объект класса никак, никоим образом.
Это касается только тех данных что Вы сами объявили/видите. А внутренняя начинка QObject может меняться. Напр 2 нитки вызвали один слот с DirectConnection - будет выполнен сначала один, потом второй (но не оба вместе). Внутренний мутекс был захвачен/освобожден. 
Записан
Страниц: 1 [2] 3 4   Вверх
  Печать  
 
Перейти в:  


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