Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/56: Рейтинг темы: голосов - 56, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 24.12.2015
Сообщений: 23
1

Передача переменной в другой класс

24.12.2015, 10:52. Показов 11085. Ответов 38
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет всем. Извиняюсь если повтор, но похожей темы не нашел.

Подскажите пожалуйста как передать значение переменной QString из одного класса в переменную QString другого класса. Понимаю, что нужно это сделать при помощи сигналов и слотов, но какой сигнал использовать? если на выбор не дается ни одного и пытаюсь вот таким образом законнектить
C++
1
2
3
4
  Name_liga = new QString();
     *Name_liga = entNewL->text();
 
     connect(entNewL,SIGNAL(textChanged(QString)),Select_Liga,SLOT (getNL(QString)));
но выдает ошибку:
expected primary-expression before ',' token
как понимаю ожидает еще какого-то действия, вот и не могу понять что он еще хочет.

пытался законнектить через свой сигнал, но там к этой ошибке - expected primary-expression before ',' token
прибавилось еще несколько
p.s. познания не большие, если что не ругайте
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.12.2015, 10:52
Ответы с готовыми решениями:

Передача QGraphicsItem в другой класс
Доброго времени суток. Столкнулся со следующей проблемой: в MainWindow создаю объект...

Передача ссылки на функцию класса Виджет в другой класс
Будет ли работать если передать ссылку на функцию от класса Виджет в класс который не виджет. ...

Отправка переменной в другой класс из ToolBar сигналом triggered
Проблема с отправкой переменной в другой класс. В идеале все должно работать так: 1. Я кликаю по...

Передача переменной по ссылке в другой класс
Здравствуйте. Собственно сабж. Имеем первый класс public class Tmp1 { public int i=10;...

38
487 / 365 / 93
Регистрация: 10.03.2011
Сообщений: 1,513
Записей в блоге: 5
29.12.2015, 12:24 21
Author24 — интернет-сервис помощи студентам
Ну и для полноты картины, connect требует указатели на метаобъект (производный QObject). Это не значит, что нужно пизать везде указатели, но connect(&Name_liga, SIGNAL(sendStr(QString)), &gnL, SLOT(getNL(QString))); было бы уже на 1/32 шага ближе.

Ты распиши толком, кто кому должен чего отослать. Например, QLineEdit при изменении текста должен при изменении строки её отдавать её в MyTextWorker на проверку, а MyTextWorker должен её принимать и отправлять сигнал, если есть ошибка. Тогда сигнал нужен для MyTextWorker при ошибке, и по слоту в MyTextWorker и InputDialog для передачи текста по кругу.

P.S. Передаётся сигнал в виде
emit MyDurtyLoliPornHaveFinallyDownloadedAndOpenedRightAtTheMomentMyMomCameInMyRoom("FckDudeThatsAwfull!", m_awfullLevel);
Ну, мало ли, вдруг ты не в курсе?
0
0 / 0 / 0
Регистрация: 24.12.2015
Сообщений: 23
04.01.2016, 11:20  [ТС] 22
Горбаг, вот мой main.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
 
    return a.exec();
}
Добавлено через 18 минут
icpu, я хочу передать строку введенную в QLineEdit entNewL; объекту другого класса
С Новым годом всех и спасибо, что помогаете!
0
661 / 662 / 106
Регистрация: 29.05.2015
Сообщений: 3,967
04.01.2016, 21:04 23
Цитата Сообщение от SergCold Посмотреть сообщение
я хочу передать строку введенную в QLineEdit entNewL; объекту другого класса
А что за объект другого класса, можно поподробнее? Куда нужно передать строку?
0
60 / 56 / 21
Регистрация: 31.03.2014
Сообщений: 234
04.01.2016, 23:21 24
Посмотрите пример.
Вложения
Тип файла: zip AtoB.zip (3.8 Кб, 15 просмотров)
0
60 / 56 / 21
Регистрация: 31.03.2014
Сообщений: 234
04.01.2016, 23:29 25
Забыл сказать.
Сначала введите что-нибудь в QLineEdit и нажмите верхнюю кнопку.
Потом закройте диалоговое окно и нажмите нижнюю. Далее начните набирать в главном окне. Вроде так.
0
0 / 0 / 0
Регистрация: 24.12.2015
Сообщений: 23
05.01.2016, 09:04  [ТС] 26
ldir82, проект не полный, у себя запустить не могу,
C++ (Qt)
1
2
3
 explicit Dialog(QWidget *parent = 0);   // ��� ����������� �� ���������
    explicit Dialog(const QString text, QWidget *parent = 0);   // ��� ��� �����������, ������� ����� ��������� ������ ��
                                                                // �������� ���� � ���������� text.
меня заинтересовали эти строки, здесь создаются 2 конструктора и получается объект сможет принимать строку?
alexu_007, выражусь точнее, в окончаловке мне нужно передать строку из переменной одного класса в переменную другого класса, но как я понимаю делать это надо через объект
0
661 / 662 / 106
Регистрация: 29.05.2015
Сообщений: 3,967
05.01.2016, 09:36 27
Цитата Сообщение от ldir82 Посмотреть сообщение
Посмотрите пример.
Ну, запустил - у меня всё работает. При нажатии на верхнюю кнопку появляется диалоговое окно со скопированным текстом. При нажатии нижней кнопки появл. диалоговое окно без текста, но при введении текста в основном окне текст синхронно меняется и в диалоговом. Так и должно быть?
0
60 / 56 / 21
Регистрация: 31.03.2014
Сообщений: 234
05.01.2016, 12:03 28
alexu_007, Да так и должно быть.
0
661 / 662 / 106
Регистрация: 29.05.2015
Сообщений: 3,967
05.01.2016, 12:53 29
А в чём проблема тогда?
0
60 / 56 / 21
Регистрация: 31.03.2014
Сообщений: 234
05.01.2016, 12:59 30
Так проблема не у меня, а у товарища SergCold. Я ему пример сделал.

Добавлено через 3 минуты
SergCold, проект полный. Полнее некуда. А конструкторов может быть много. Все зависит от нужд. В конструкторе могут быть переданы необходимые данные, например для инициализации объекта.
0
0 / 0 / 0
Регистрация: 24.12.2015
Сообщений: 23
05.01.2016, 13:02  [ТС] 31
ldir82, говорю, у меня не запускается проект и в работе оценить его не могу. а по коду тоже много вопросов(коменты не отображаются)
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
    dialog  = new Dialog();
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
void MainWindow::on_pushButton_clicked()  КАК запускается этот слот? и что в нем происходит?
{
    /// ������� �������� ������ ����� �����������!!!
 
    Dialog dialog(ui->lineEdit->text(),this); // �������� - ������� ����. ��� (����) �������� �� ����������� ����������� ����.
    dialog.exec();
 
}
 
void MainWindow::on_pushButton_2_clicked()КАК запускается этот слот? 
{
 
    dialog->show();
    connect(ui->lineEdit,SIGNAL(textChanged(QString)),dialog,SLOT(getText(QString)));   // ��������� ������ (��������) ��������� ����
                                                                                      // �� ������ (�����) ����������� ����
}
0
60 / 56 / 21
Регистрация: 31.03.2014
Сообщений: 234
05.01.2016, 13:21 32
SergCold, для начала, чтобы хотя бы увидеть комментарии, поменяй в настройках Qt кодировку (параметры - текстовый редактор - поведение - кодировка файлов). Поставь либо system, либо Windows-1251. Да, пример сделан в версии 4.8.1
0
0 / 0 / 0
Регистрация: 24.12.2015
Сообщений: 23
05.01.2016, 13:44  [ТС] 33
ldir82, здесь как понимаю при нажатии на кнопку создается объект dialog которому передается в качестве аргумента введенный текст, this - не понимаю что делает
C++ (Qt)
1
Dialog dialog(ui->lineEdit->text(),this);
коменты сделал
0
60 / 56 / 21
Регистрация: 31.03.2014
Сообщений: 234
05.01.2016, 16:57 34
SergCold, все верно. this это адрес текущего объекта (в данном случае MainWindow).Он передается в качестве аргумента конструктору класса Dialog. А значит объект по адресу this будет родителем т.е. он будет отвечать за его уничтожение (объекта dialog).
1
661 / 662 / 106
Регистрация: 29.05.2015
Сообщений: 3,967
06.01.2016, 09:14 35
Передать в другой класс можно глобальную переменную. Говорят, это очень неправильно - но работает.
0
0 / 0 / 0
Регистрация: 24.12.2015
Сообщений: 23
06.01.2016, 10:05  [ТС] 36
Всем спасибо!!! Разобрался, оказывается коннект нужно было делать до того как кнопка ОК будет нажата, иначе уже никакого сигнала издаваться не будет и поэтому никак не мог передать строку. Конечно хотелось передать строку которую подтвердили нажатием кнопки ок, но так тоже пойдет
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
void InputDialog::create_NewLiga()
{
    crtNL = new InputDialog();
    crtNL->resize(200,200);
    crtNL->show();
 
    connect(crtNL->entNewL, SIGNAL(textEdited(QString)), asd, SLOT(getNL(QString)));
    if(crtNL->exec() == QDialog::Accepted)
    {
          crtNL->NewLiga();
    }
    delete crtNL;
}
0
661 / 662 / 106
Регистрация: 29.05.2015
Сообщений: 3,967
06.01.2016, 10:50 37
Цитата Сообщение от SergCold Посмотреть сообщение
Конечно хотелось передать строку которую подтвердили нажатием кнопки ок, но так тоже пойдет
Да всё можно сделать так как захочешь, а не так как получилось. Сигнал законнектить с твоим приёмником и передавать в нем переменную по нажатию кнопки.

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
    dialog  = new Dialog();
 
    connect(this, SIGNAL(transferData(QString)), dialog, SLOT(getText(QString)));
}
 
 
......
 
 
void MainWindow::on_pushButton_2_clicked()
{
    dialog->show();
    emit transferData(ui->lineEdit->text());
}
0
0 / 0 / 0
Регистрация: 24.12.2015
Сообщений: 23
06.01.2016, 11:19  [ТС] 38
alexu_007, пробовал так, не срабатывает сигнал, компилятор вроде все норм выдает но соединения не происходит
0
661 / 662 / 106
Регистрация: 29.05.2015
Сообщений: 3,967
06.01.2016, 16:17 39
У других работает. Значит где-то ошибаешься. Выложи свой код где не срабатывает и спроси почему.
0
06.01.2016, 16:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.01.2016, 16:17
Помогаю со студенческими работами здесь

Передача значения переменной Activity в другой класс
Есть активность: public class Menu extends Activity { OnClickListener lt; EditText Day,...

Передача значения переменной одной формы в описание переменной другой
Всем привет. Не могу найти решение проблемы. На первой форме имеется глобальная переменная kol,...

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

Передача переменной в другой скрипт
Неработает передача значения переменной в другой скрипт по такой конструкции: void Start () {...


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

Или воспользуйтесь поиском по форуму:
39
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru