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

Как вызвать функцию в Qt с переменной, которая берется из другой формы?

24.10.2017, 15:33. Показов 6573. Ответов 17

Author24 — интернет-сервис помощи студентам
Есть две формы (firstForm и MainWindow). В firstForm присутствует SpinBOX, из которого мне нужно брать значение, что задает пользователь. Затем это значение нужно передать в форму MainWindow и при помощи switch выводить соответствующие элементы. Проблема в том, что во время объявления функции и передачи в нее значение, оно становится начальным каждый раз( т.е. вызывает функцию заново).

Как это исправить? Как заставить брать нужное значение?

firstForm
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//взятие значения из SpinBox
int firstForm::value(int kolvkl)
{
    kolvkl = ui->kolVkl->value();
    qDebug()<<kolvkl;
    return kolvkl;
}
 
//по нажатию кнопки открываю другую форму
void firstForm::on_buttonBox_clicked()
{
    MainWindow *w = new MainWindow;
    w->show();
}
MainWindow
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
//вызываю по нажатию кнопки функцию ValueofVklad (куда нужно передать значение) и, соответственно, передаю его
void MainWindow::on_pushButton_clicked()
{
    firstForm f;
    int v = 0;
    int val = f.value(v);
    ValueofVklad(val);
}
 
//функция, в которой используется нужное значение
void MainWindow::ValueofVklad(int val)
{
int kolVkl;
    kolVkl = val;
 
    switch (kolVkl) {
        case 2: {
            break;
        }
        case 3: {
            break;
        }
        case 4: {
            break;
        }
        case 5: {
            break;
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.10.2017, 15:33
Ответы с готовыми решениями:

Как вызвать функцию из одной формы на другой?
Здравствуйте, у меня имеются 2 формы: AddFile.h и MyMenu.h Я пытаюсь на форме AddFile вызвать...

Как правильно вызвать функцию из другой формы
public void TreeView_load(TreeView treeView1) { //тут много всего ...

Вызвать функцию из другой формы
Здравствуйте, есть функция в форме form1 под названием public void func(). Как кодом прописать,...

как вызвать процедуру из другой формы
В form2 надо вызвать процедуру procedure TForm1.RecordsClick(Sender: TObject); которая находится в...

17
68 / 68 / 17
Регистрация: 20.01.2015
Сообщений: 347
24.10.2017, 15:53 2
Прочитайте про сигналы и слоты.

Сигнал void QSpinBox::valueChanged(int i) связать со слотом обработчиком, который будет писать во 2 форму.
0
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 23
24.10.2017, 20:14  [ТС] 3
Вы наверно не совсем поняли. Мне не нужно каждый раз менять значение в SpinBox. Я его беру всего один раз, когда пользователь выбирает необходимое ему значение и нажимает кнопку "Ок". После этого форма firstForm закрывается и не используется в дальнейшем. Мне кажется, здесь не нужны сигналы и слоты.
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,706
24.10.2017, 20:44 4
Что это за поделка? В 12-13 ты повторно главное окно создаёшь, что ли?
Какое окно у тебя первично? Если MainWindow, то тогда вызывай второе как модальный диалог, и если пользователь не выбрал отмену, считывай значение.
0
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 23
24.10.2017, 21:34  [ТС] 5
Я не создаю повторно главное окно, я вызываю его по нажатию кнопки ОК. Сначала я вызываю окно firstForm, нажимаю ОК. Окно закрывается и сразу появляется окно MainWindow.
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,706
24.10.2017, 21:43 6
Тогда в on_pushButton_clicked() обращайся к тому экземпляру, который отображался.
0
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 23
24.10.2017, 21:46  [ТС] 7
Но мне нужно к нему обратиться после нажатия кнопки на форме MainWindow
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,706
24.10.2017, 21:49 8
Ты сам не запутался? В какой последовательности окна создаются и отображаются?
0
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 23
24.10.2017, 22:01  [ТС] 9
Сначала создается и отображается firstForm, затем по нажатию кнопки ОК открывается MainWindow
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,706
24.10.2017, 22:04 10
MainWindow::on_pushButton_clicked() после вызывается? Она должна работать с исходным firstForm, а не с локальным. Я уже писал.
0
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 23
24.10.2017, 22:07  [ТС] 11
Я не совсем понимаю, что вы пишите. Можно немного подробнее? Что мне стоит изменить?
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,706
24.10.2017, 22:20 12
4-ю строку убрать. И обращаться по указателю к исходному firstForm.
0
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 23
24.10.2017, 22:26  [ТС] 13
Цитата Сообщение от nmcf Посмотреть сообщение
4-ю строку убрать. И обращаться по указателю к исходному firstForm.
Так?
C++ (Qt)
1
firtForm *f = new firstForm;
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,706
24.10.2017, 22:37 14
Да почему так? Ничего не надо создавать. Ты же уже создал экземпляр, который первым отображается. Вот его указатель и используй.

Добавлено через 1 минуту
Или может, тебе проще сделать параметр в конструкторе MainWindow и туда сразу передать?
0
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 23
24.10.2017, 22:44  [ТС] 15
Цитата Сообщение от nmcf Посмотреть сообщение
Или может, тебе проще сделать параметр в конструкторе MainWindow и туда сразу передать?
У меня есть функция ValueofVklad(), куда и нужно передать параметр со SpinBox
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,706
24.10.2017, 22:46 16
Ну используй её. Тогда она должна быть public.
0
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 23
24.10.2017, 22:54  [ТС] 17
Цитата Сообщение от nmcf Посмотреть сообщение
Ну используй её. Тогда она должна быть public.
Она и есть public. Вся ошибка моей программы в том, что я вызываю функцию считывания значения из спинбокса повторно, и оно мне считывает значение по умолчанию(т.е. самое первое). А мне нужно, чтобы оно считало то, что выбрал пользователь
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,706
24.10.2017, 23:39 18
C++ (Qt)
1
2
3
4
5
6
void firstForm::on_buttonBox_clicked()
{
    MainWindow *w = new MainWindow;
    w->ValueofVklad(ui->kolVkl->value());
    w->show();
}
0
24.10.2017, 23:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.10.2017, 23:39
Помогаю со студенческими работами здесь

Как вызвать значение переменной в другую функцию
Как вызвать значение переменной типа string в другую функцию не используя ref, out

Как вызвать одну функцию из другой?
Здравствуйте! Начал учить питон и встал на такой задаче. Как мне после ввода имени и фамилии...

Как вызвать ZQuery компонент из другой формы
Подскажите как вызвать ZQuery компонент с другой формы. Попыталась вот так: procedure...

Как вызвать функцию pictureBox1_Paint_1() из другой функции?
Здравствуйте, граждане программисты! Уже долго не могу запустить функцию из другой функции:...

Как вызвать форму по нажатию кнопки с другой формы?
Народ, только начал работать с WebForm. Есть ли штатные инструменты вызова формы в виде отдельного...

Как вызвать процедуру из MDI child из другой формы?
Привет друзья. Возникла проблема с MDI форма. Вопрос. В MDI форма есть элемент DataGridview то...


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

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