Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 11.12.2015
Сообщений: 11

Как управлять виджетами ui из другого класса

12.05.2018, 13:06. Показов 3614. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть класс внутри которого находится функция, к которой я хочу получить доступ из другого класса ?
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
class MainWidget : public QWidget
{
    Q_OBJECT
public:
    explicit MainWidget(QWidget *parent = 0);
    ~MainWidget();
protected:
    Ui::MainWidget *ui;
public slots:
    void Hideall();
C++ (Qt)
1
2
3
4
class Decorator : public MainWidget{
public slots:
    void DHideall();
};
Если я получаю функцию так
C++ (Qt)
1
2
3
4
void Decorator::DHideall()
{
    Hideall();
}
и вызываю её так
C++ (Qt)
1
2
Decorator dec;
    dec.DHideall();
то возникает ошибка [release/moc_mainwidget.cpp] Error 1

Так собственно как можно иначе получить эту функцию ? или как-то иначе можно обратиться к ui находящемуся в классе MainWidget ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.05.2018, 13:06
Ответы с готовыми решениями:

Взаимодействие с виджетами класса QMainWindow из класса QOpenGLWidget
Здравствуйте, недавно начал изучать Qt, столкнулся с проблемой. Мне необходимо получить доступ к различным виджетам главного окна из...

работа с виджетами другого окна
Привет. В первом окне есть кнопка, она открывает другое окно. Как мне сделать реализацию этой кнопки во втором окне, чтобы при нажатии на...

Как связать сигнал одного класса со слотом другого класса, содержащего указатель на объект этого класса?
Подскажите, пожалуйста, как связать сигнал одного класса со слотом другого класса, содержащего указатель на объект этого класса. Буду очень...

22
0 / 0 / 0
Регистрация: 11.12.2015
Сообщений: 11
15.05.2018, 23:37  [ТС]
Студворк — интернет-сервис помощи студентам
А сделать два экземпляра ui возможно ?
Для двух разных классов.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
20.05.2018, 16:46
Они и так должны быть разные.
0
6 / 6 / 2
Регистрация: 29.05.2018
Сообщений: 13
29.05.2018, 14:29
Почитав данную ветку, трудно понять что требуется.
Но, если вам нужно получить доступ к виджету созданному через Qt designer, напрямую не получится. Потому как они private.
К примеру имеем класс:
Кликните здесь для просмотра всего текста
C++ (Qt)
1
2
3
4
5
6
7
8
class MainWindow : public QMainWindow {
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private:
    Ui::MainWindow *ui;
    };

Допустим на форме расположен виджет textEdit:QTextEdit. Если нам нужно добавить текст то мы воспользуемся методом ui->textEdit->append("текст"); , но это работает только внутри класса.
Если вам нужно получить доступ к виджету вне класса то можно воспользоваться двумя способами:
Первый. Создать public метод внутри класса MainWindow, и вызывать его. Это правильный способ.
Кликните здесь для просмотра всего текста
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
class MainWindow : public QMainWindow {
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
     void addtext(QString &str); //новый метод.
private:
    Ui::MainWindow *ui;
    };
 
void MainWindow::addtext(QString &str){ui->textEdit->append(str);}


Второй способ, менне безопасный. Создаем новый public указатель на виджет:
Кликните здесь для просмотра всего текста
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class MainWindow : public QMainWindow {
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
     QTextEdit *public_textEdit; // создаем указатель.
private:
    Ui::MainWindow *ui;
    };
 
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{
   public_textEdit = ui->textEdit; // присваимаем
// незабываем удалить указатель public_textEdit после вызова деструктора Ui.
}
// Теперь внутри класса к виджету можно обратится двумя способами через ui->textEdit->append("add text");
// или public_textEdit->append("add text");


Теперь после создание объекта добавлять текст в виджет textEdit можем так.
Первый способ:
Кликните здесь для просмотра всего текста
C++ (Qt)
1
2
3
4
5
MainWindow test;
QString str ="добавляем текст";
test.addtext(str);
// если нужно удалить текст, придется на каждое действие создавать новый метод.
public void ClearText(){ui->textEdit->clear();}


второй способ:
Кликните здесь для просмотра всего текста
C++ (Qt)
1
2
3
4
MainWindow test;
test.public_textEdit.append("добавляем текст");
// в таком способе можно использовать напрямую методы и свойства виджета, а также сигналы и слоты.
test.public_textEdit.clear();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.05.2018, 14:29

Как из другого класса управлять объектами класса Form1 ?
Добрый вечер, подскажите, пожалуйста. Создал форму Form1, создал отдельный класс (подписчик на одно событие из Форм1) , в котором ,вроде...

Как управлять компонентами формы из другого модуля
Microsoft Visual C++ 2008 (2005) Простая задачка: Создаем новый проект "Test1" с пустой формой "Form1". На форму...

Как управлять всеми обьектами класса одновременно?
Здравствуйте! Возник вопрос такого плана, можно ли управлять всеми объектами класса одновременно. Например: у меня есть объект ...

Как получить private переменную класса, функцей членом другого класса
Игра змейка: Есть класс поле в котором содержится размеры поля: class field { private: int FIELD_START; int...

Приём константных векторов класса, как аргументов в методе другого класса
Есть такой класс: class Order { private: int numberOrder; map <string, int> catalogDish; double totalCost; public: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru