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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Как вычисленное значение с одной формы передать на другую?  (Прочитано 10821 раз)
lexflax
Гость
« : Январь 26, 2014, 07:22 »

Доброго времени суток.
На форме mainwindows у меня вычисляется значение первого столбца строки которую выбрал пользователь.
Код:
QModelIndex current  = ui->tableView->currentIndex();
    qDebug() << ui->tableView->model()->data(ui->tableView->model()->index(current.row(),0),0);
Мне полученное значение поля записать в комбобокс который на ходится на form6...
Как это можно сделать? Знаю что как то с сигналами и слотами... но как именно не представляю пока как можно передать эти значения... подскажите пожалуйста...
Записан
Vamireh
Гость
« Ответ #1 : Январь 26, 2014, 10:36 »

добавьте публичный метод в form6 типа void setValue(QVariant &), в нем в комбо бокс значение заносите. из первой формы вызовите этот метод
Записан
lexflax
Гость
« Ответ #2 : Январь 26, 2014, 12:08 »

form6.h
Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QWidget>
#include <QDialog>
namespace Ui {
class Form6;
}

class Form6 : public QDialog
{
    Q_OBJECT
   
public:
void setValue(QVariant &);
    explicit Form6(QDialog  *parent = 0);
    ~Form6();
form6.cpp
Код:
void MainWindow::setValue(QVariant &)
{
QModelIndex current  = ui->tableView->currentIndex();
ui->comboBox->addItem((ui->tableView->model()->data(ui->tableView->model()->index(current.row(),0),0)).toString());
}
Вызова функции из mainwindow еще не делал, решил просто запустить проверить... и сразу же ошибку выдало...
Код:
D:\project qt new\untitled\untitled33\form6.cpp:63: ошибка: no 'void MainWindow::setValue(QVariant&)' member function declared in class 'MainWindow'
Что ему не нравится?
Еще момент... Компонент combobox у меня есть и на mainwindow и на form6 в этой функции если я понимаю он будет брать тот который на mainwindow а надо чтоб записывал в тот который на form6
Код:
void MainWindow::setValue(QVariant &)
{
QModelIndex current  = ui->tableView->currentIndex();
ui->comboBox->addItem((ui->tableView->model()->data(ui->tableView->model()->index(current.row(),0),0)).toString());
}
Записан
lexflax
Гость
« Ответ #3 : Январь 26, 2014, 12:52 »

если вызову функцию так
Код:
void Form6::setValue(QVariant &)
{
QModelIndex current  = ui->tableView->currentIndex();
ui->comboBox->addItem((ui->tableView->model()->data(ui->tableView->model()->index(current.row(),0),0)).toString());
}
То он не увидит
Код:
tableView
И выдает ошибку
Код:
D:\project qt new\untitled\untitled33\form6.cpp:65: ошибка: 'class Ui::Form6' has no member named 'tableView'
Записан
Bepec
Гость
« Ответ #4 : Январь 26, 2014, 12:54 »

Учить C++ и объектно ориентированное программирование.
Нет у вас в Form6 объекта MainWindow.
Записан
lexflax
Гость
« Ответ #5 : Январь 26, 2014, 13:06 »

Ну объясните что я делаю не так? и как правильно нужно все выстроить?
Записан
Vamireh
Гость
« Ответ #6 : Январь 26, 2014, 13:45 »

1) Первая форма должна знать указатель на шестую форму
2) В шестой форме (если использовать дизейнер), то все виджеты - приватные, делать их публичными - моветон. Поэтому, например, делайте публичный метод в 6 форме, который принимает ваше значение и сует его куда надо в свою (шестую) форму
3) Поскольку из п.1 следует, что первая форма знает адрес шестой, то просто вызывайте этот метод шестой формы типа form6->setValue....

Код настолько очевиден, что лень писать. Достаточно прочитать одну главу по ООП из любой книжки, что бы он и для вас стал очевиден. Qt на этом уровне не причем.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Январь 26, 2014, 13:46 »

Ну объясните что я делаю не так?
Да все. Лепите абы как, Ваш текст навевает грусть и меланхолию. Ладно, по существу: хз кто такой tableView и где/как он объявлен. Есть форма, на ней комбик, Вы хотите установить в нем нужный  айтем. Ну и делайте в setValue только это, аргумент - текст для установки. А откуда он возьмется - это уже дело того кто вызовет Form6::setValue
Записан
lexflax
Гость
« Ответ #8 : Январь 26, 2014, 14:25 »

Вы хотите установить в нем нужный  айтем. Ну и делайте в setValue только это, аргумент - текст для установки.
Нужный текст (содержимое у меня получается в результате выполнения вот этой строчки)
Код:
ui->tableView->model()->data(ui->tableView->model()->index(current.row(),0),0);
после нажатия кнопки....
Код:
void MainWindow::on_pushButton_3_clicked()
{
    QModelIndex current  = ui->tableView->currentIndex();
    qDebug() << ui->tableView->model()->data(ui->tableView->model()->index(current.row(),0),0);
    Form6 *w6 = new Form6 ;
     w6->exec();

}
Все это находится на MainWindow форме...
Перенести эту строчку
Код:
ui->tableView->model()->data(ui->tableView->model()->index(current.row(),0),0);
в form6
я не могу он мне выдаст ошибку
Код:
D:\project qt new\untitled\untitled33\form6.cpp:65: ошибка: 'class Ui::Form6' has no member named 'tableView'
потому что tableView в из которого я получаю нужную мне инфу находится на форме MainWindow
Записан
lexflax
Гость
« Ответ #9 : Январь 26, 2014, 16:13 »

Теоретически можно пустить сигнал содержащий необходимые данные из MainWindow а в Form6 словить этот сигнал...
Но как это практически реализовать я не знаю(( и какие именно данные пустить вместе с сигналом не знаю(
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #10 : Январь 26, 2014, 16:19 »

Давайте проект сюда и расскажите, что как и куда Улыбающийся
Записан

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

Сообщений: 4744



Просмотр профиля WWW
« Ответ #11 : Январь 26, 2014, 17:12 »

почитай про параметры метода/конструктора
Записан

Изучением 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
sergey2212
Гость
« Ответ #12 : Январь 29, 2014, 09:24 »

Не понимаю зачем усложнять все так. Не легче объяснить человеку чем отправлять его читать мануалы.

Я делаю так, вот у меня есть форма А где у меня есть значение, мне надо передать в другую форму Б

в (форма приема).h создаю слот

public slots:
 void priem(int)

в (форма приема).cpp прописываю
 void (форма приема)::priem(int a)
{
    a - значение которое я получил и делаю с ним что хочу
}

в (форме отправке).h создаю сигнал

signals:
  void otpravka(int)

в (форме отправке).cpp

в любом месте где я получаю значение и мне надо его передать прописываю

QObject::connect(this, SIGNAL(otpravka(int)), &(форма приема), SLOT(priem(int)));

далее передаю непосредственно сигнал
emit otpravka(нужное значение)

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

Сообщений: 11445


Просмотр профиля
« Ответ #13 : Январь 29, 2014, 10:33 »

Не легче объяснить человеку чем отправлять его читать мануалы.
Вы скоро убедитесь что нет Улыбающийся Я пытался объяснить то же самое - передатчик передает, приемщик принимает. Но ТС упорно хочет влезть в кишки передатчика на стороне приемника. 
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #14 : Январь 29, 2014, 13:08 »

2sergey2212: в данном случае использование сигнал-слотового механизма не оправдано — это ненужное усложнение. а объяснять ТСу азы С++ у нас на форуме вряд ли кто-то будет.
Записан

Изучением 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.053 секунд. Запросов: 23.