Перейти к содержанию
    

Препроцессор QT/moc

Поннравился механизм signal/slot в Qt. Его реализация обеспечивается препроцессором moc. То есть теоретически есть возможность его использования вне Qt. Реализовать соответствующий алгоритм в makefile и вперед. Лично моей квалификации на это пока не хватит. Мож делал кто?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну вообще то там две части - с одной стороны препроцессор (который обеспечивает удобный синтаксис объявления сигналов/слотов) а с другой - поддержка в библиотеке (которая обеспечивает работу всего этого во время выполнения)

 

Просто взять и выдрать из Qt сигналы/слоты врядли получится - они потянут еще какие-то части QtCore. Если процессор "жирный", то можно просто взять Qt и скомпилировать его часть (эту самую QtCore) для данного процессора.

 

Или можно посмотреть на буст, там есть нечто похожее - signals2, который (насколько я помню) компиляции не требует.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Просто взять и выдрать из Qt сигналы/слоты врядли получится - они потянут еще какие-то части QtCore. Если процессор "жирный", то можно просто взять Qt и скомпилировать его часть (эту самую QtCore) для данного процессора.

 

Правильно ли я понял, что можно собрать Qt, который будет генерировать код, не привязанный к ОС , например, линуксу?

 

Напрямую из Вашего поста это не следует, но если нет, тогда к чему эти манипуляции? Просто берем и пишем для линуха

 

PS не знаю процента жирности LPC435xx

Изменено пользователем nanorobot

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Правильно ли я понял, что можно собрать Qt, который будет генерировать код, не привязанный к ОС , например, линуксу?

Напрямую из Вашего поста это не следует, но если нет, тогда к чему эти манипуляции? Просто берем и пишем для линуха

Qt большая. Сигналы и слоты относятся к QtCore, которую, по идее, можно собрать и без ОС (но скорее всего весьма непросто :) )

 

Стоит ли овчинка выделки только ради сигналов/слотов - хз, мне кажется много проще взять std::function. Как-то так

 

struct MyCoolObject {
  std::vector<std::function<void(int a)> > subscribers;
  
  void fireEvent() {
    for (auto &s: subscribers)
      s(42);
  }
} obj;

obj.subscribers.push_back([](int a) { std::cout<< a;});

obj.fireEvent();

 

PS не знаю процента жирности LPC435xx

200 МГц, 1 Мб ПЗУ и 136 кб ОЗУ - ну хз, сильно зависит, сколько сожрет прикладной код. Моя QtCore.dll весит 2,1 Мб. Утоптать ее наверное можно, вот только какая выгода?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

200 МГц, 1 Мб ПЗУ и 136 кб ОЗУ - ну хз, сильно зависит, сколько сожрет прикладной код. Моя QtCore.dll весит 2,1 Мб. Утоптать ее наверное можно, вот только какая выгода?

Параметры процессора мне известны. Неизвестна "жирность" по отношению к гипотетическому КуТэ без линуха...

Изменено пользователем nanorobot

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Параметры процессора мне известны. Неизвестна "жирнрсть" по отношению к гипотетическому КуТэ без линуха...

ИМХО, для Qt тут ресурсов маловато. Хотя возможно я ошибаюсь. Экспериментируйте :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Или можно посмотреть на буст, там есть нечто похожее - signals2, который (насколько я помню) компиляции не требует.

Или можно посмотреть на реализации, использующие FastDelegate, например https://github.com/pbhogan/Signals

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Без ОС Qt вам не собрать, потому что это фреймворк над системными интерфейсами. Как вариант можно портировать под uClinux 4ую версию Qt, но потребуется немало времени для подбора оптимальных настроек и поиска патчей под Thumb2. На lpc1788 где-то месяц потратил на порт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Без ОС Qt вам не собрать, потому что это фреймворк над системными интерфейсами.

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно многое напильником сделать, но оправдает ли задачу потраченное время... К слову скажу, что без поддержки тредов Qt4 и тем более 5 не собрать. ОС хотя б это предлагает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно многое напильником сделать, но оправдает ли задачу потраченное время...

Я бы не стал, но в принципе то :) Собственно для проца ТС-а все это вообще непонятно зачем надо.

 

К слову скажу, что без поддержки тредов Qt4 и тем более 5 не собрать. ОС хотя б это предлагает.

Думаю зависит от степени владения напильником. По крайней мере qtCore наверное собрать можно и что-то даже работать будет. Самый простой вариант - просто заменить все связанное с потоками на заглушки. Или какой-то базовый функционал строго завязан на наличие фоновых потоков?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как минимум придется пилить атомарный доступ, спинлоки. Вопрос уже поднимался. Особенно сильно на потоки завязаны QtWidgets.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вроде бы используя ОС EmBox http://se.math.spbu.ru/SE/embox можно запускать на МК приложения, написанные на Qt.

 

Еще вариант, с помощью компилятора Clang можно заменить moc http://woboq.com/blog/moc-with-clang.html

Сколько труда нужно вложить, чтобы для МК получить сигналы/слоты - даже не представляю ( в этом варианте, без сторонних библиотек).

Изменено пользователем Slash

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Механизм сигналов/слотов можно в некоторой степени заменить мьютексами средствами RTOS.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Механизм сигналов/слотов можно в некоторой степени заменить мьютексами средствами RTOS.

 

 

Вероятно Вы хотели сказать - семафорами?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...