Russian Qt Forum

Qt => Базы данных => Тема начата: lexflax от Январь 26, 2014, 07:22



Название: Как вычисленное значение с одной формы передать на другую?
Отправлено: 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...
Как это можно сделать? Знаю что как то с сигналами и слотами... но как именно не представляю пока как можно передать эти значения... подскажите пожалуйста...


Название: Re: Как вычисленное значение с одной формы передать на другую?
Отправлено: Vamireh от Январь 26, 2014, 10:36
добавьте публичный метод в form6 типа void setValue(QVariant &), в нем в комбо бокс значение заносите. из первой формы вызовите этот метод


Название: Re: Как вычисленное значение с одной формы передать на другую?
Отправлено: lexflax от Январь 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());
}


Название: Re: Как вычисленное значение с одной формы передать на другую?
Отправлено: lexflax от Январь 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'


Название: Re: Как вычисленное значение с одной формы передать на другую?
Отправлено: Bepec от Январь 26, 2014, 12:54
Учить C++ и объектно ориентированное программирование.
Нет у вас в Form6 объекта MainWindow.


Название: Re: Как вычисленное значение с одной формы передать на другую?
Отправлено: lexflax от Январь 26, 2014, 13:06
Ну объясните что я делаю не так? и как правильно нужно все выстроить?


Название: Re: Как вычисленное значение с одной формы передать на другую?
Отправлено: Vamireh от Январь 26, 2014, 13:45
1) Первая форма должна знать указатель на шестую форму
2) В шестой форме (если использовать дизейнер), то все виджеты - приватные, делать их публичными - моветон. Поэтому, например, делайте публичный метод в 6 форме, который принимает ваше значение и сует его куда надо в свою (шестую) форму
3) Поскольку из п.1 следует, что первая форма знает адрес шестой, то просто вызывайте этот метод шестой формы типа form6->setValue....

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


Название: Re: Как вычисленное значение с одной формы передать на другую?
Отправлено: Igors от Январь 26, 2014, 13:46
Ну объясните что я делаю не так?
Да все. Лепите абы как, Ваш текст навевает грусть и меланхолию. Ладно, по существу: хз кто такой tableView и где/как он объявлен. Есть форма, на ней комбик, Вы хотите установить в нем нужный  айтем. Ну и делайте в setValue только это, аргумент - текст для установки. А откуда он возьмется - это уже дело того кто вызовет Form6::setValue


Название: Re: Как вычисленное значение с одной формы передать на другую?
Отправлено: lexflax от Январь 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


Название: Re: Как вычисленное значение с одной формы передать на другую?
Отправлено: lexflax от Январь 26, 2014, 16:13
Теоретически можно пустить сигнал содержащий необходимые данные из MainWindow а в Form6 словить этот сигнал...
Но как это практически реализовать я не знаю(( и какие именно данные пустить вместе с сигналом не знаю(


Название: Re: Как вычисленное значение с одной формы передать на другую?
Отправлено: gil9red от Январь 26, 2014, 16:19
Давайте проект сюда и расскажите, что как и куда :)


Название: Re: Как вычисленное значение с одной формы передать на другую?
Отправлено: kambala от Январь 26, 2014, 17:12
почитай про параметры метода/конструктора


Название: Re: Как вычисленное значение с одной формы передать на другую?
Отправлено: sergey2212 от Январь 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(нужное значение)



Название: Re: Как вычисленное значение с одной формы передать на другую?
Отправлено: Igors от Январь 29, 2014, 10:33
Не легче объяснить человеку чем отправлять его читать мануалы.
Вы скоро убедитесь что нет :) Я пытался объяснить то же самое - передатчик передает, приемщик принимает. Но ТС упорно хочет влезть в кишки передатчика на стороне приемника. 


Название: Re: Как вычисленное значение с одной формы передать на другую?
Отправлено: kambala от Январь 29, 2014, 13:08
2sergey2212: в данном случае использование сигнал-слотового механизма не оправдано — это ненужное усложнение. а объяснять ТСу азы С++ у нас на форуме вряд ли кто-то будет.


Название: Re: Как вычисленное значение с одной формы передать на другую?
Отправлено: lexflax от Январь 30, 2014, 14:31
sergey2212, Сергей спасибо все сделал)