Russian Qt Forum
Ноябрь 22, 2024, 22:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Как в файле cpp получить доступ к элементу фор  (Прочитано 5406 раз)
timovadia
Новичок

Offline Offline

Сообщений: 12


Просмотр профиля
« : Ноябрь 15, 2020, 12:30 »

Прошу помочь разобраться. Создал виджет проект. В файле widget.ui добавил кнопку pushButton (QPushButton) и поле textEdit (QTextEdit).

Мне нужно в поле textEdit добавить текст. Как это сделать? Как получить доступ к созданным на ui элементам формы и их методам?

Понимаю, что должно быть что-то вроде этого:
Код
C++ (Qt)
QTextEdit edit;
edit.setReadOnly(true);
edit.insertPlainText("text");

В файле widget.cpp следующий код:

Код
C++ (Qt)
#include "widget.h"
#include "ui_widget.h"
 
#include <QApplication>
#include <QAxObject>
#include <QAxWidget>
#include <QtWidgets>
#include <QString>
 
Widget::Widget(QWidget *parent)
   : QWidget(parent)
   , ui(new Ui::Widget)
{
   ui->setupUi(this);
}
 
Widget::~Widget()
{
   delete ui;
}
 
 
int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
 
   Widget mainWindow;
   mainWindow.setWindowTitle("qwerty");
 
   QVBoxLayout layout(&mainWindow);
 
   mainWindow.show();
   return a.exec();
}
 
void Widget::on_pushButton_clicked()
{
   this->close();
}
« Последнее редактирование: Ноябрь 15, 2020, 12:59 от timovadia » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Ноябрь 15, 2020, 12:37 »

из методов класса Widget все элементы из дизайнера доступны через ui->элемент, например ui->textEdit.

просто надо читать документацию Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
tux
Global Moderator
Бывалый
*****
Offline Offline

Сообщений: 404



Просмотр профиля
« Ответ #2 : Ноябрь 15, 2020, 12:41 »

ui->textEdit->setText("текст");
Например
Записан

timovadia
Новичок

Offline Offline

Сообщений: 12


Просмотр профиля
« Ответ #3 : Ноябрь 15, 2020, 12:44 »

В widget.cpp в main() пишу:
Код
ui->

Но ничего нет. Обычно помощник высвечивает список доступных вещей.

Код:
ui->textEdit->setText("текст");

Пишет, что ui -- undeclared identifier. Что я делаю не так? Где его нужно объявлять?
« Последнее редактирование: Ноябрь 15, 2020, 12:59 от timovadia » Записан
tux
Global Moderator
Бывалый
*****
Offline Offline

Сообщений: 404



Просмотр профиля
« Ответ #4 : Ноябрь 15, 2020, 13:03 »

Пишет, что ui -- undeclared identifier. Что я делаю не так? Где его нужно объявлять?
А вы откуда доступ то пытаетесь получить? В вашем случае это надо делать из самого вашего класса Widget. И в этом классе нет метода main Улыбающийся
Вообще, лучше почитать сначала документацию. Или посмотреть "видосы" на youtube
« Последнее редактирование: Ноябрь 15, 2020, 13:05 от tux » Записан

timovadia
Новичок

Offline Offline

Сообщений: 12


Просмотр профиля
« Ответ #5 : Ноябрь 15, 2020, 13:07 »

А вы откуда доступ то пытаетесь получить? В вашем случае это надо делать из самого вашего класса Widget. И в этом классе нет метода main Улыбающийся
Хотел бы получить доступ из main(). Почему я в main не могу обращаться к элементам формы, не пойму? Буду читать и смотреть уроки.
« Последнее редактирование: Ноябрь 15, 2020, 13:19 от timovadia » Записан
tux
Global Moderator
Бывалый
*****
Offline Offline

Сообщений: 404



Просмотр профиля
« Ответ #6 : Ноябрь 15, 2020, 13:23 »

Почему я в main не могу обращаться к элементам формы, не пойму?
Потому, что ui формы находится в приватной зоне. Хотите доступ из main - сделайте сеттер. Т.е. публичный метод в форме Widget, который и будет устанавливать значения в ui.
« Последнее редактирование: Ноябрь 15, 2020, 13:35 от tux » Записан

timovadia
Новичок

Offline Offline

Сообщений: 12


Просмотр профиля
« Ответ #7 : Ноябрь 15, 2020, 13:30 »

Спасибо! Туман понемногу рассеивается Улыбающийся
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #8 : Ноябрь 15, 2020, 13:39 »

а что мешает сделать все то же самое в конструкторе Widget? будет меньше возни.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
tux
Global Moderator
Бывалый
*****
Offline Offline

Сообщений: 404



Просмотр профиля
« Ответ #9 : Ноябрь 15, 2020, 13:40 »

а что мешает сделать все то же самое в конструкторе Widget? будет меньше возни.
Вряд ли ТС хотел константный текст. Иначе, проще вообще в редакторе форм нужное написать. Улыбающийся
Записан

timovadia
Новичок

Offline Offline

Сообщений: 12


Просмотр профиля
« Ответ #10 : Ноябрь 15, 2020, 13:49 »

а что мешает сделать все то же самое в конструкторе Widget? будет меньше возни.
Плохо понимаю, о чем речь. Имеется ввиду что-то вроде этого?

Код
C++ (Qt)
#include <QWidget>
 
class MyWidget : public QWidget
{
public:
    MyWidget(QWidget *parent = 0);
};
Записан
tux
Global Moderator
Бывалый
*****
Offline Offline

Сообщений: 404



Просмотр профиля
« Ответ #11 : Ноябрь 15, 2020, 13:59 »

Код:
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->textEdit->setText("текст");
}
Но так текст будет снаружи не изменяемым. Сеттер сделать лучше.
Записан

kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #12 : Ноябрь 15, 2020, 14:15 »

Плохо понимаю, о чем речь.
значит, стоит уделить побольше времени изучению самого языка С++, а в «окошки» лезть уже после Подмигивающий

предлагается перенести код из main(), связанный непосредственно с внутренностями Widget, в метод, где написано ui->setupUi(this) (после этой строки).

вообще, довольно часто main() выглядит крайне однообразно и не содержит никакой логики (особенно связанной с окошками):
Код
C++ (Qt)
int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
 
   Widget mainWindow;
   mainWindow.show();
 
   return a.exec();
}
 
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
timovadia
Новичок

Offline Offline

Сообщений: 12


Просмотр профиля
« Ответ #13 : Ноябрь 15, 2020, 14:16 »

Странно. Вот пытаюсь написать , что предложили, но textEdit не видно.



Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #14 : Ноябрь 15, 2020, 14:20 »

значит, открывай дизайнер (свой файл ui), выделяй текстовое поле на своей форме и смотри какой у него идентификатор
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.346 секунд. Запросов: 23.