На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела *nix / gcc / Eclipse / Qt / wxWidgets / GTK+
  • При создании темы ОБЯЗАТЕЛЬНО указывайте версию тулкита / библиотеки / компилятора.
  • Перед тем как задать вопрос, сформулируйте его правильно, чтобы вас могли понять.
  • Нарушение Правил может повлечь наказание со стороны модераторов.


Полезные ссылки:
user posted image Boost по-русски
user posted image Qt по-русски
Модераторы: archimed7592
  
> Особенности работы ф-ции Connect, Signal, Slot. , Qt Creator v.3.5.x.
    Как понял, connect становится доступна только тогда, когда к стороннему CPP-файлу создается одноименный H-файл с классом. Далее, если в функциях CPP писать "класс::" - функция connect становится не неизвестной ф-цией.

    Как понял, 4 входящих параметра (указатели или сами объекты?): Вызываемый объект - SIGNAL(вызываемое действие объекта) - Выполняющийся объект - SLOT(метод выполняющегося объекта).

    С первым параметром проблем нет. SIGNAL, когда ставишь скобку, сам предоставляет выбор из доступных сигналов. Например, создание таймера добавит в этот список 3 сигнала, включая timeout.


    А вот с остальными 2-мя параметрами жуткая путаница.

    Пусть есть файл Some.cpp, внутри Some.h создаю класс SOME, в PRIVATE SLOTS добавляю функцию void Func(void). В CPP-файле создаю new объект класса SOME. Создаю функцию SOME::void Func(void).

    Вроде бы, объект создан, через точку видно метод Func - а в списке "SLOT(" все равно пусто. Как поместить функцию в SLOT, чтобы при наборе "SLOT(" она выпадала из списка?
      компиль пробывал делать? этож метаобджект, по идее после выполнения кумейк должно появится.
        Компил происходит, но списка все равно нет. Что бы принудительно ни писалось в SLOT() - ничего не выполняется.
          Цитата Сергей85 @
          Пусть есть файл Some.cpp, внутри Some.h создаю класс SOME, в PRIVATE SLOTS добавляю функцию void Func(void). В CPP-файле создаю new объект класса SOME. Создаю функцию SOME::void Func(void).


          Какая-то кривая конструкция...

          Когда ты хочешь использовать connect с сигнала и слотами в классе надо прописать макрос Q_OBJECT

          class MyCl {
          Q_OBJECT

          он добавляет для компилятора уже чисто С++ код чтоб у тебя сигналы и слоты корректно работали.
            Цитата Сергей85 @
            Как понял, connect становится доступна только тогда, когда к стороннему CPP-файлу создается одноименный H-файл с классом. Далее, если в функциях CPP писать "класс::" - функция connect становится не неизвестной ф-цией.

            Идиома "сигналы-слоты" = суть "расширения" синтаксиса языка С++ средствами мета-объектной системы Qt, которая преобразуется в стандартный синтаксис С++ посредством moc (мета-объектного компилятора). Как указали выше, достаточно:

            1) Унаследовать свой класс от QObject
            2) Прописать макрос Q_OBJECT в самом начале объявления своего класса
              Итак, что действительно нужно для работы с connect (алгоритм без уточнений):
              - инклудить в h-файл <QMainWindow>;
              - создать класс в h-файле, добавив к названию " : public QMainWindow";
              - создать в cpp функцию Class::void Some(void). В любом Cpp-файле;
              - прописать ее в h-файле классу в "private/public slots:".

              Тогда функция появится и в объекте класса, и при наборе "SLOT(".


              Решение проблемы с connect решило проблему работы с ui. Чтобы ui был доступен в любом cpp-файле, нужно просто:
              - к функции в любом cpp-файле дописать префикс "Class::";
              - в h-файл класса Class вписать название функции в то место, где написан "Ui... *ui".
                Бред!

                А вот это:

                Цитата Сергей85 @
                - создать в cpp функцию Class::void Some(void). В любом Cpp-файле;

                Бред бредовый.

                Почитай документацию лучше, чем городить невесть-что.
                  Цитата JoeUser @

                  У меня есть рабочий метод на практике. Ничего читать больше не требуется.
                    Цитата Сергей85 @
                    У меня есть рабочий метод на практике.

                    Если где-то что-то прокатило - это "частный удачный случай".
                    Надо оригинальную документацию читать, а не городить выводы по факту "у меня получилось".

                    Хотя ... я не настаиваю - для собственного использования все что угодно.
                    Но не следует это выдавать за истину - не нужно других вводить в заблуждения!
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0283 ]   [ 17 queries used ]   [ Generated: 28.03.24, 09:35 GMT ]