Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[44.211.228.24] |
|
Сообщ.
#1
,
|
|
|
Как понял, 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(" она выпадала из списка? |
Сообщ.
#2
,
|
|
|
компиль пробывал делать? этож метаобджект, по идее после выполнения кумейк должно появится.
|
Сообщ.
#3
,
|
|
|
Компил происходит, но списка все равно нет. Что бы принудительно ни писалось в SLOT() - ничего не выполняется.
|
Сообщ.
#4
,
|
|
|
Цитата Сергей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 он добавляет для компилятора уже чисто С++ код чтоб у тебя сигналы и слоты корректно работали. |
Сообщ.
#5
,
|
|
|
Цитата Сергей85 @ Как понял, connect становится доступна только тогда, когда к стороннему CPP-файлу создается одноименный H-файл с классом. Далее, если в функциях CPP писать "класс::" - функция connect становится не неизвестной ф-цией. Идиома "сигналы-слоты" = суть "расширения" синтаксиса языка С++ средствами мета-объектной системы Qt, которая преобразуется в стандартный синтаксис С++ посредством moc (мета-объектного компилятора). Как указали выше, достаточно: 1) Унаследовать свой класс от QObject 2) Прописать макрос Q_OBJECT в самом начале объявления своего класса |
Сообщ.
#6
,
|
|
|
Итак, что действительно нужно для работы с 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". |
Сообщ.
#7
,
|
|
|
Бред!
А вот это: Цитата Сергей85 @ - создать в cpp функцию Class::void Some(void). В любом Cpp-файле; Бред бредовый. Почитай документацию лучше, чем городить невесть-что. |
Сообщ.
#8
,
|
|
|
Цитата JoeUser @ У меня есть рабочий метод на практике. Ничего читать больше не требуется. |
Сообщ.
#9
,
|
|
|
Цитата Сергей85 @ У меня есть рабочий метод на практике. Если где-то что-то прокатило - это "частный удачный случай". Надо оригинальную документацию читать, а не городить выводы по факту "у меня получилось". Хотя ... я не настаиваю - для собственного использования все что угодно. Но не следует это выдавать за истину - не нужно других вводить в заблуждения! |