|
0 / 0 / 0
Регистрация: 05.08.2008
Сообщений: 7
|
|
Проблема с видимостью объекта класса из функции05.08.2008, 11:30. Показов 4744. Ответов 11
Метки нет (Все метки)
Здравстуйте! Работаю со связкой QT+KDevelop. В функции main создается и отображается объект-основная форма. Программа работает с CAN-сетью. Далее стоит функция которая при получении сообщения из сети вызывает функцию-обработчик. Функция обработчик не является методом класса моей формы и не видит объект-форму. Вопрос:как из функции-обработчика добраться до формы и её компонентов?
0
|
|
| 05.08.2008, 11:30 | |
|
Ответы с готовыми решениями:
11
Возможно ли создание объекта шаблонного класса в функции этого класса?
Проблема с созданием объекта динамического массива Класса |
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 05.08.2008, 14:28 | |
|
Может, friend?
0
|
|
|
40 / 40 / 10
Регистрация: 27.06.2008
Сообщений: 118
|
||
| 05.08.2008, 16:19 | ||
|
А ты напиши свою функцию-обработчик как метод твоего класса, или так тебе не катит?!
Добавлено через 3 минуты
0
|
||
|
0 / 0 / 0
Регистрация: 05.08.2008
Сообщений: 7
|
||||||||||||||||||
| 05.08.2008, 18:08 [ТС] | ||||||||||||||||||
Регистрирует обработчик события. Параметры: chan - номер канала ev - события, возможные значения определены в заголовочном файле chai.h: CIEV_RC - получен CAN-кадр из сети ci_handler - обработчик события, имеет следующий прототип: void ci_handler(_s16 ev) Подставить свой метод из класса не получается из-за прототипа. Вот прототип:
![]()
![]() С friend пробывал, методы видно итак, а объект не видно.
0
|
||||||||||||||||||
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 05.08.2008, 18:47 | |
|
Переменной объекта не видно? Или к чему ты доступ хочешь получить? К свойствам объекта? Что тебе от объекта нужно? Когда делаешь с friend у тебя видны все внутренние структуры объекта, что-то еще требуется?
Если переменной не видно, то поменяй область видимости у перменной-объекта формы.
0
|
|
|
0 / 0 / 0
Регистрация: 05.08.2008
Сообщений: 7
|
||||||
| 05.08.2008, 19:02 [ТС] | ||||||
А frmMainImpl wndMain; можно только внутри main,там еще куча всего. Как еще можно поменять область видимости?
0
|
||||||
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 05.08.2008, 19:07 | |
|
Ну еще бы! Переменная формы у тебя видна только в main. Твоя функция вне main, поэтому она ничего не видит. Или вынеси переменную за границы main, или static попробуй. Тогда она будет видна во всем файле.
0
|
|
|
0 / 0 / 0
Регистрация: 05.08.2008
Сообщений: 7
|
|
| 05.08.2008, 19:12 [ТС] | |
|
За пределы вынести не могу-ругается KDevelop,static-пробовал не помогает.
0
|
|
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 05.08.2008, 19:20 | |
|
Заткни эту тупую неповоротливую кривую среду
нафих. Запускай g++ напрямую и компиль. Ты всегда собираешься идти на поводу у среды? Синтаксически ты спокойно можешь вынести за пределы функции. Я с тупостью KDevelop бороться не собираюсь. На что, хоть, ругается-то?Через friend ты доберешься до любого текстбокса, до любого свойства в классе. В чем проблема-то? P. S. Да, со static я перегнул. Он же сохраняет между вызовами... Выноси за пределы и исправляй то, на что эта среда жалуется. Будет тебе видна твоя переменная.
1
|
|
|
0 / 0 / 0
Регистрация: 05.08.2008
Сообщений: 7
|
|
| 06.08.2008, 11:28 [ТС] | |
|
KDevelop ругается так:QPaintDevice: Must construct QApplication before a QPaintDevice
А можно про friend хоть пару строчек кода, а то я что-то не пойму? И объект дружественной функцие передавать все равно придется?
0
|
|
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|||||||||||
| 06.08.2008, 15:24 | |||||||||||
|
А почему бы тогда не сдалат совсем просто?
Использовать указатель. Вне main объявляем указатель на нашу форму. А в main собственно уже создаем ее.Выглядеть все это будет примерно так:
Добавлено через 6 минут К слову, возвращаясь назад, не вижу причины не установить в качестве обрабочика метод класса, как верно было подемечено Turbosega. Вот пример простенький:
![]() Добавлено через 41 минуту Можно еще создать функцию-wrapper для хэндлера. То есть, оболочку, которая будет хэндлером, и будет вызывать сами функции из класса. Вообщем-то три основных метода.
1
|
|||||||||||
|
0 / 0 / 0
Регистрация: 05.08.2008
Сообщений: 7
|
|
| 07.08.2008, 09:58 [ТС] | |
|
Vourhey огромное СПАСИБО всё получилось!
Указатель-просто как всё гениальное!Если вдруг кому-то понадобится информация по CAN-сетям обращайтесь!
0
|
|
| 07.08.2008, 09:58 | |
|
Помогаю со студенческими работами здесь
12
Проблема с видимостью HDD Проблема с видимостью переменных Управление видимостью объекта при наведении на него курсора Проблема с видимостью Окон в Spy++ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|