B
Betal1 ноября 2017 г. 10:41

Как работать с объектами Ui из другого класса?

qt, ui, Class Qt

Допустим у меня есть Gui Class A; простой class B.

Как сделать, так чтоб в классе В можно было обращаться к объектам интерфейса(формы) класса А?
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

5
Evgenii Legotckoi
  • 1 ноября 2017 г. 10:47

Обычно делают геттер функцию. Например, так:

QWidget* A::getSomeWidget()
{
    return ui->someWidget;
}
Есть ещё варианты, когда делают различные friend или ещё что-то такое, но правильнее будет просто иметь геттер, который возвратит указатель на интересующий виджет интерфейса.
У нас в проекте так сделано.
    B
    • 2 ноября 2017 г. 3:46

    Выдает ошибку

      Evgenii Legotckoi
      • 2 ноября 2017 г. 3:56
      1. Нельзя вызывать вот так просто функции в объявлении класса, это как минимум должны быть функции которые являеются constexpr. И они тогда будут использоваться на этапе компиляции проекта. Но ui никогда не будет использоваться на этапе компиляции.
      2. Подобный вызов метода, как Вы сделали, допустим только в том случае, когда функция статическая, а она в данном конкретном случае не может быть статической. У вас есть конкретный инстанс. Значит нужно передать указатель или ссылку на объект LogTracking в объект Streamer и уже там в конструкторе Streamer или в ином другом методе вызывать метод GetUi().
      3. Посмотрите, как инициализируется класс интерфейса в Qt Creator при создании виджета. Там немного отличается от того, что делает Visual Studio. VS создаёт объект ui в стеке, а удобнее, когда память будет выделяться в куче. Лучше Вам подкорректировать этот момент.
        B
        • 2 ноября 2017 г. 4:55

        1. Пытался и в функции объявить, не получилось
        2. Пытался создать его элемент, но даже после того как заинклюдил .h файл, он там начал ругаться на непредвиденные лексемы и еще очень много ошибок
        3. Самой большой ошибкой у меня было это создать в VS проект. Пытался поменять, ничего не получилось, сразу исключения кидаются

          Evgenii Legotckoi
          • 2 ноября 2017 г. 16:55

          Не. У вас тот объект уже должен быть создан, как я понимаю. Поэтому нужно передать на него ссылку, или указатель. Я имею ввиду LogTracking. А что касается самого Ui::LogTrackingClass, то лучше на него указатель не дёргайте.. А для каждого необходимого виджета в этом ui берите указатель. Дело в том, что Ui класс и заголовочник на него создаётся автоматически и это что-то вроде Pimpl, private implementation и его в принципе выносить какими-либо методами наружу не стоит. Брать компоненты этого ui и выносить на них указатель запросто, а вот весь ui сразу.... нет.... вообще, если Вы такое делаете, то что-то не так с вашим подходом к разработке. Уверен, что можно сделать иначе. Например, использовать какие-либо геттеры или сеттеры для доступа к контенту.

            Комментарии

            Только авторизованные пользователи могут публиковать комментарии.
            Пожалуйста, авторизуйтесь или зарегистрируйтесь
            г
            • ги
            • 24 апреля 2024 г. 1:51

            C++ - Тест 005. Структуры и Классы

            • Результат:41баллов,
            • Очки рейтинга-8
            l
            • laei
            • 23 апреля 2024 г. 19:19

            C++ - Тест 004. Указатели, Массивы и Циклы

            • Результат:10баллов,
            • Очки рейтинга-10
            l
            • laei
            • 23 апреля 2024 г. 19:17

            C++ - Тест 003. Условия и циклы

            • Результат:50баллов,
            • Очки рейтинга-4
            Последние комментарии
            k
            kmssr9 февраля 2024 г. 5:43
            Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
            АК
            Анатолий Кононенко5 февраля 2024 г. 12:50
            Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
            EVA
            EVA25 декабря 2023 г. 21:30
            Boost - статическая линковка в CMake проекте под Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
            J
            JonnyJo25 декабря 2023 г. 19:38
            Boost - статическая линковка в CMake проекте под Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
            G
            Gvozdik19 декабря 2023 г. 8:01
            Qt/C++ - Урок 056. Подключение библиотеки Boost в Qt для компиляторов MinGW и MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
            Сейчас обсуждают на форуме
            G
            Gar22 апреля 2024 г. 15:46
            Clipboard Как скопировать окно целиком в clipb?
            DA
            Dr Gangil Academics20 апреля 2024 г. 17:45
            Unlock Your Aesthetic Potential: Explore MSC in Facial Aesthetics and Cosmetology in India Embark on a transformative journey with an msc in facial aesthetics and cosmetology in india . Delve into the intricate world of beauty and rejuvenation, guided by expert faculty and …
            a
            a_vlasov14 апреля 2024 г. 16:41
            Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
            Павел Дорофеев
            Павел Дорофеев14 апреля 2024 г. 12:35
            QTableWidget с 2 заголовками Вот тут есть кастомный QTableView с многорядностью проект поддерживается, обращайтесь
            f
            fastrex4 апреля 2024 г. 14:47
            Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…

            Следите за нами в социальных сетях