Форум программистов, компьютерный форум, киберфорум
Наши страницы

Qt

Войти
Регистрация
Восстановить пароль
 
Козка
1 / 1 / 0
Регистрация: 25.12.2012
Сообщений: 29
#1

Передать данные из одной формы на другую. Ошибка - C++ Qt

13.05.2015, 19:56. Просмотров 979. Ответов 3
Метки нет (Все метки)

Добрый день!
Имеется две формы: MainWindow, form_add.
В form_add три текстовых поля, хочу, чтобы значения из них при нажатии на кнопку передавались в форму MainWindow.

Знаю, что нужно со слотами и сигналами работать.
Делала опираясь ан пример из http://easy-qt.blogspot.com/2012/10/1.html
Только автор показал передачу данных из главной формы на новую, а у меня ситуация наоборот.
Пыталась переделать, ругается на строку в конструкторе mainwindow.cpp
C++ (Qt)
1
 connect(form_add, SIGNAL(sendData(QString, QString, QString)), this, SLOT(recieveData(QString, QString, QString)) ); // подключение сигнала к слоту нашей формы
Ошибка следующая:
Ошибка expected primary-expression before ',' token

Вот коды:

mainwindow.cpp
Кликните здесь для просмотра всего текста
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "form_add.h"
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //подключаемся к БД
    myDB = QSqlDatabase::addDatabase("QSQLITE");
 
    QString pathToDB = QDir::currentPath()+QString("/vocabulary.sqlite");
    myDB.setDatabaseName(pathToDB);
 
    QFileInfo checkFile(pathToDB);
    if (checkFile.isFile())
    {
       if (myDB.open())
       {
            ui->plainTextEdit->setPlainText("[+] Connection correct!");
       }
       else
       {
            ui->plainTextEdit->setPlainText("[!] Database File was not opened");
       }
    }
    else
    {
        ui->plainTextEdit->setPlainText("[!] Database File does not exist");
    }
 
    ui->myTable->setColumnCount(3);
    ui->myTable->setSelectionMode(QAbstractItemView::SingleSelection);
    ui->myTable->setSelectionBehavior(QAbstractItemView::SelectRows);
    insert_values();
 
    connect(form_add, SIGNAL(sendData(QString, QString, QString)), this, SLOT(recieveData(QString, QString, QString)) ); // подключение сигнала к слоту нашей формы
}
 
void MainWindow::insert_values()
{
    QSqlQuery query;
    query.exec("SELECT * FROM words_ukrainian ORDER BY word DESC;");
 
    while (query.next()) {
        ui->myTable->insertRow(0);
        ui->myTable->setItem(0, 0, new QTableWidgetItem(query.value(0).toString()));
        ui->myTable->setItem(0, 1, new QTableWidgetItem(query.value(1).toString()));
        ui->myTable->setItem(0, 2, new QTableWidgetItem(query.value(2).toString()));
        ui->myTable->setRowHeight(0, 20);
    }
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
void MainWindow::recieveData(QString word, QString def, QString examp)
{
    QString s_word = word;
    QString s_def = def;
    QString s_examp = examp;
    QTextStream(stdout) << s_word << endl;
    QTextStream(stdout) << s_def << endl;
    QTextStream(stdout) << s_examp << endl;
}
 
 
//нажимаем на кнопку "добавить слово"
void MainWindow::on_btnAdd_clicked()
{
    form_add *add_from = new form_add();
    add_from->show();
}


form_add.cpp
Кликните здесь для просмотра всего текста
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
31
32
33
34
35
36
#include "form_add.h"
#include "ui_form_add.h"
#include <QTextStream>
 
form_add::form_add(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::form_add)
{
    ui->setupUi(this);
    setAttribute(Qt::WA_DeleteOnClose, true);
 
    connect(ui->btnAddWord, SIGNAL(clicked()), this, SLOT(onButtonSend())); // подключаем клик по кнопке к определенному нами слоту
}
 
form_add::~form_add()
{
    delete ui;
}
 
void form_add::onButtonSend()
{
    // вызываем сигнал, в котором передаём введённые данные
    emit sendData(ui->lineWord->text(),ui->textDef->toPlainText(),ui->textExamp->toPlainText());
}
 
void form_add::on_btnAddWord_clicked()
{
 
    QString word = ui->lineWord->text();
    QString defifnition = ui->textDef->toPlainText();
    QString example = ui->textExamp->toPlainText();
 
    QTextStream(stdout) << word << endl;
    QTextStream(stdout) << defifnition << endl;
    QTextStream(stdout) << example << endl;
}


mainwindow.h
Кликните здесь для просмотра всего текста
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
31
32
33
34
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
#include <QtSql>
#include <QTableWidget>
#include "form_add.h"
 
namespace Ui {
class MainWindow;
}
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
 
private slots:
    void on_btnAdd_clicked();
    void insert_values();
    void on_btnDelete_clicked();
 
public slots:
    void recieveData(QString word, QString def, QString examp);
 
private:
    Ui::MainWindow *ui;
    QSqlDatabase myDB;
};
 
#endif // MAINWINDOW_H


form_add.cpp
Кликните здесь для просмотра всего текста
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
#ifndef FORM_ADD_H
#define FORM_ADD_H
 
#include <QWidget>
#include "mainwindow.h"
 
namespace Ui {
class form_add;
}
 
class form_add : public QWidget
{
    Q_OBJECT
 
public:
    explicit form_add(QWidget *parent = 0);
    ~form_add();
 
private slots:
    void on_btnAddWord_clicked();
    void onButtonSend();
 
signals:
    void sendData(QString word, QString def, QString examp);
 
private:
    Ui::form_add *ui;
};
 
#endif // FORM_ADD_H


form_add.ui
Кликните здесь для просмотра всего текста
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>form_add</class>
 <widget class="QWidget" name="form_add">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>340</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Form</string>
  </property>
  <widget class="QLineEdit" name="lineWord">
   <property name="geometry">
    <rect>
     <x>30</x>
     <y>30</y>
     <width>161</width>
     <height>22</height>
    </rect>
   </property>
  </widget>
  <widget class="QTextEdit" name="textDef">
   <property name="geometry">
    <rect>
     <x>30</x>
     <y>80</y>
     <width>311</width>
     <height>87</height>
    </rect>
   </property>
  </widget>
  <widget class="QTextEdit" name="textExamp">
   <property name="geometry">
    <rect>
     <x>30</x>
     <y>200</y>
     <width>311</width>
     <height>87</height>
    </rect>
   </property>
  </widget>
  <widget class="QLabel" name="label">
   <property name="geometry">
    <rect>
     <x>40</x>
     <y>10</y>
     <width>55</width>
     <height>16</height>
    </rect>
   </property>
   <property name="text">
    <string>Слово:</string>
   </property>
  </widget>
  <widget class="QLabel" name="label_2">
   <property name="geometry">
    <rect>
     <x>30</x>
     <y>60</y>
     <width>91</width>
     <height>16</height>
    </rect>
   </property>
   <property name="text">
    <string>Визначення:</string>
   </property>
  </widget>
  <widget class="QLabel" name="label_3">
   <property name="geometry">
    <rect>
     <x>30</x>
     <y>180</y>
     <width>55</width>
     <height>16</height>
    </rect>
   </property>
   <property name="text">
    <string>Приклад:</string>
   </property>
  </widget>
  <widget class="QPushButton" name="btnAddWord">
   <property name="geometry">
    <rect>
     <x>150</x>
     <y>300</y>
     <width>93</width>
     <height>28</height>
    </rect>
   </property>
   <property name="text">
    <string>Додати</string>
   </property>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>


mainwindow.ui
Кликните здесь для просмотра всего текста
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>505</width>
    <height>389</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralWidget">
   <widget class="QPushButton" name="btnAdd">
    <property name="geometry">
     <rect>
      <x>350</x>
      <y>20</y>
      <width>111</width>
      <height>28</height>
     </rect>
    </property>
    <property name="text">
     <string>Додати слово</string>
    </property>
   </widget>
   <widget class="QPushButton" name="btnDelete">
    <property name="geometry">
     <rect>
      <x>350</x>
      <y>60</y>
      <width>121</width>
      <height>28</height>
     </rect>
    </property>
    <property name="text">
     <string>Видалити слово</string>
    </property>
   </widget>
   <widget class="QPlainTextEdit" name="plainTextEdit">
    <property name="geometry">
     <rect>
      <x>10</x>
      <y>10</y>
      <width>321</width>
      <height>101</height>
     </rect>
    </property>
   </widget>
   <widget class="QTableWidget" name="myTable">
    <property name="geometry">
     <rect>
      <x>10</x>
      <y>120</y>
      <width>401</width>
      <height>192</height>
     </rect>
    </property>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menuBar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>505</width>
     <height>26</height>
    </rect>
   </property>
  </widget>
  <widget class="QToolBar" name="mainToolBar">
   <attribute name="toolBarArea">
    <enum>TopToolBarArea</enum>
   </attribute>
   <attribute name="toolBarBreak">
    <bool>false</bool>
   </attribute>
  </widget>
  <widget class="QStatusBar" name="statusBar"/>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <resources/>
 <connections/>
</ui>
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2015, 19:56
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Передать данные из одной формы на другую. Ошибка (C++ Qt):

Передать данные из одной формы в другую - C++ Qt
Доброй ночи(у меня) и доброго времени суток всем. Столкнулся с проблемой, что не могу передать правильно через сигналы и слоты...

Как вычисленное значение с одной формы передать на другую? - C++ Qt
Доброго времени суток. На форме mainwindows у меня вычисляется значение первого столбца строки которую выбрал пользователь. QModelIndex...

Как передавать данные от одной формы в другую ? - C++ Qt
Как передавать данные из одной формы в другую ? Допустим, в одной форме заполняются эдиты и при нажатии на кнопку в этой же форме эти...

Передать значение переменной из одной функции в другую - C++ Qt
Добрый день, подскажите как передать значение t из одной функции в другую. из этой void settingrec::interval(QString...

Переход с одной формы на другую - C++ Qt
Нужно, чтобы после нажатия кнопки на одной форме, открывалась другая. когда пишу void MainWindow::on_pushButton_clicked() { ...

Передача данных из одной формы в другую - C++ Qt
Всем привет! Как передавать значения, например QComboBox из формы А в форму B?

3
Гром
211 / 130 / 11
Регистрация: 20.03.2009
Сообщений: 1,108
Записей в блоге: 16
Завершенные тесты: 1
13.05.2015, 21:32 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Вам нужно связывать не класс form_add, а его конкретный экземпляр со своей формой. Соответственно, приконнектить вы можете ее к слоту своей вы сможете после того, как этот экземпляр создадите. Так что и connect нужно прописывать рядом с созданием экземпляра формы:
C++ (Qt)
1
2
3
4
5
6
void MainWindow::on_btnAdd_clicked()
{
    form_add *add_from = new form_add();
    connect(add_from, SIGNAL(sendData(QString, QString, QString)), this, SLOT(recieveData(QString, QString, QString)) );
    add_from->show();
}
1
alexey_rage
589 / 389 / 79
Регистрация: 23.10.2013
Сообщений: 1,143
13.05.2015, 22:11 #3
Уважаемый, так сюда в коннект в качестве сендера нужно передавать указатель на объект, а не тупо имя класса.

connect нужно перенести в:

C++ (Qt)
1
2
3
4
5
6
7
//нажимаем на кнопку "добавить слово"
void MainWindow::on_btnAdd_clicked()
{
    form_add *add_from = new form_add();
    connect(add_from, SIGNAL(sendData(QString, QString, QString)), this, SLOT(recieveData(QString, QString, QString)) ); // подключение сигнала к слоту нашей формы
    add_from->show();
}
Но вообще так плохо делать.
У вас каждый раз при нажатии на кнопку btnAdd создается новый экземпляр класса form_add, но они нигде не удаляются!
1
Козка
1 / 1 / 0
Регистрация: 25.12.2012
Сообщений: 29
13.05.2015, 23:00  [ТС] #4
Гром, Большое спасибо, помогло.
alexey_rage, подскажете как мне корректно освободить память?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2015, 23:00
Привет! Вот еще темы с ответами:

Вызов одной формы через другую. - C++ Qt
В общем у меня очередной вопрос назрел)) Создал я еще один проект- диалоговое окно. Накидал на него все что мне нужно. Так же есть...

Передача данных с одной формы на другую - C++ Qt
Всем привет. На одной форме расположено поле ввода и кнопка, по нажатию которой осуществляется переход на вторую форму. На второй...

Передача значения переменной из одной формы в другую - C++ Qt
Доброго времени суток Форумчане. Столкнулся с такой проблемой что мне нужно передать данные с одной формы на другую. Нашёл как это делается...

Передать данные из одной формы в другую - C#
На первой форме есть treeView1, в котором описаны страны и города. Нужно передать выбраный город на форму2 в label1.


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru