3 / 3 / 0
Регистрация: 22.05.2010
Сообщений: 77
1

Вызов одной формы через другую.

15.08.2010, 13:43. Показов 10629. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В общем у меня очередной вопрос назрел))

Создал я еще один проект- диалоговое окно. Накидал на него все что мне нужно.
Так же есть еще один проект- на основе QMainWindow (основной проект).

Мне нужно чтобы по нажатию кнопки в основном проекте у меня вызывался второй проект (который диалоговое окошко).

Скопировал файлы второй проект.ui, второй проект.cpp, второй проект.h в директорию основного проекта.

Подключил второй проект в основной проект.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "ctf.h"
#include "ui_ctf.h"
#include "Global.h"
#include "cvoqf.h" <= Вот здесь подключил
#include <QtGui>
#include <QWidget>
#include <QDialog>
 
 int Global::k=0;
 
 
 CTF::CTF(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::CTF)
{
    ui->setupUi(this);
создал слот в котором создается указатель на второй проект:

C++
1
2
CVOQF *Form=new CVOQF();
    Form->show();
законнектил с сопутствующим сигналом.

В итоге на этапе сборки выдается ошибка:

undefined reference to `CVOQF::CVOQF(QWidget*)

Почему? Вроде же все сделал правильно...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.08.2010, 13:43
Ответы с готовыми решениями:

Вызов из одной формы другой
Доброго времени суток. Есть головная форма, вызывающая побочную (диалоговую), задача которой...

Вызов одной формы из другой
добрый день вообщем есть как бы проект соответственно со структурой 1)mainwindow.h...

Вызов одной формы из другой
Нужно вызвать форму2 по нажатию кнопочки на форме1, как я могу это осуществить? Добавил в проект...

Вызов одной формы из другой и наоборот
Нужно реализовать вот такую ​​штуку: есть одна форма создана дизайнером, на ней есть кнопка которая...

11
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
15.08.2010, 13:49 2
.cpp файл добавь

Добавлено через 1 минуту
для того чтоб создать еще одну форму, не нужно создавать еще один проект.
0
3 / 3 / 0
Регистрация: 22.05.2010
Сообщений: 77
15.08.2010, 13:51  [ТС] 3
а как проще сделать??? Просто как класс описать???
0
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
15.08.2010, 13:54 4
какую IDE используешь?
0
3 / 3 / 0
Регистрация: 22.05.2010
Сообщений: 77
15.08.2010, 13:56  [ТС] 5
Qt 4.6.3
0
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
15.08.2010, 13:59 6
бррр..
я не про фреймворк спрашиваю.
0
3 / 3 / 0
Регистрация: 22.05.2010
Сообщений: 77
15.08.2010, 14:32  [ТС] 7
Ну всм вы имеете ввиду с помощью чего я компилирую и т.д?? В Qt creator пишу. Если я не то отвечаю то пожалуйста не сердитесь) Я Новичок. И в терминологии еще не очень хорошо разбираюсь))

Добавлено через 27 минут
кстати если добавляю второй проект.cpp в опистание, то ругается вот на эту строчку
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "cvoqf.h"
#include "ui_cvoqf.h"
 
CVOQF::CVOQF(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::CVOQF)                      <=
{
    ui->setupUi(this);
}
 
CVOQF::~CVOQF()
{
    delete ui;
говорит undefined reference to 'vtable for CVOQF причем многократно
0
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
15.08.2010, 14:51 8
Цитата Сообщение от ovoshlook Посмотреть сообщение
Qt creator
о! свершилось!

правый клик на проекте - добавить новый - форма Qt Designer
Цитата Сообщение от ovoshlook Посмотреть сообщение
undefined reference to 'vtable for CVOQF
потому что .h файл класса нужно скормить moc`у. он сгенерит еще один .cpp файл который так же, нужно добавить к компиляции.
1
3 / 3 / 0
Регистрация: 22.05.2010
Сообщений: 77
15.08.2010, 15:00  [ТС] 9
Цитата Сообщение от niXman Посмотреть сообщение
о! свершилось!
Свершилось)))

Цитата Сообщение от niXman Посмотреть сообщение
потому что .h файл класса нужно скормить moc`у. он сгенерит еще один .cpp файл который так же, нужно добавить к компиляции.
moc_второй проект.cpp???


и кстати где именно там надо на проекте кликнуть правой кнопкой?? Немного не понял)))
0
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
15.08.2010, 15:03 10
Цитата Сообщение от ovoshlook Посмотреть сообщение
и кстати где именно там надо на проекте кликнуть правой кнопкой?
вот тут:
Миниатюры
Вызов одной формы через другую.  
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
15.08.2010, 15:55 11
Простенький пример вызова диалогового окна, содранный с небдольшими изменениями из книжки М. Шлее "Qt 4.5 профессиональное программирование на С++"
dialogs.h
C++
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
#ifndef DIALOGS_H
#define DIALOGS_H
 
#include <QtGui>
 
class Dialog : public QDialog {
    Q_OBJECT
    QLineEdit * pleFirstName;
    QLineEdit * pleSecondName;
public:
    Dialog(QWidget * parent = 0);
    QString getFirstName() const;
    QString getSecondName() const;
};
 
class MainWindow : public QMainWindow {
    Q_OBJECT
    QLabel * plabFirstName;
    QLabel * plabSecondName;
public:
    MainWindow(QWidget * parent = 0);
public slots:
    void slotAskForName();
};
 
#endif // DIALOGS_H
dialogs.cpp
C++
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
#include <QApplication>
#include "dialogs.h"
 
Dialog::Dialog(QWidget *parent) : QDialog(parent){
    pleFirstName = new QLineEdit();
    pleSecondName = new QLineEdit();
 
    QLabel * plabFirstName = new QLabel("&First name:");
    plabFirstName->setBuddy(pleFirstName);
    QLabel * plabSecondName = new QLabel("&Second name:");
    plabSecondName->setBuddy(pleSecondName);
 
    QPushButton * pbtnOk = new QPushButton("&Ok");
    connect(pbtnOk, SIGNAL(clicked()), SLOT(accept()));
    QPushButton * pbtnCancel = new QPushButton("&Cancel");
    connect(pbtnCancel, SIGNAL(clicked()), SLOT(reject()));
 
    QGridLayout * pGridLayout = new QGridLayout();
    pGridLayout->addWidget(plabFirstName, 0, 0);
    pGridLayout->addWidget(pleFirstName, 0, 1);
    pGridLayout->addWidget(plabSecondName, 1, 0);
    pGridLayout->addWidget(pleSecondName, 1, 1);
    pGridLayout->addWidget(pbtnOk, 2, 0);
    pGridLayout->addWidget(pbtnCancel, 2, 1);
 
    setLayout(pGridLayout);
}
 
QString Dialog::getFirstName() const {
    return pleFirstName->text();
}
 
QString Dialog::getSecondName() const {
    return pleSecondName->text();
}
 
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {
    plabFirstName = new QLabel("Unknown");
    plabSecondName = new QLabel("Unknown");
    QLabel * plabFNLabel = new QLabel("First name:");
    QLabel * plabSNLabel = new QLabel("Second name:");
    QPushButton * pbtnAsk = new QPushButton("&Ask for name");
 
    connect(pbtnAsk, SIGNAL(clicked()), SLOT(slotAskForName()));
 
    QGridLayout * pGridLayout = new QGridLayout();
    pGridLayout->addWidget(plabFNLabel, 0, 0);
    pGridLayout->addWidget(plabFirstName, 0, 1);
    pGridLayout->addWidget(plabSNLabel, 1, 0);
    pGridLayout->addWidget(plabSecondName, 1, 1);
 
    QVBoxLayout * pVBoxLayout = new QVBoxLayout();
    pVBoxLayout->addLayout(pGridLayout);
    pVBoxLayout->addWidget(pbtnAsk);
 
    QWidget * pWgt = new QWidget();
    pWgt->setLayout(pVBoxLayout);
    setCentralWidget(pWgt);
}
 
void MainWindow::slotAskForName(){
    Dialog * pDialog = new Dialog(this);
 
    if ( pDialog->exec() == QDialog::Accepted ){
        plabFirstName->setText(pDialog->getFirstName());
        plabSecondName->setText(pDialog->getSecondName());
    }
 
    delete pDialog;
}
 
 
///////////////////////////////////////////////////////
//                  application                      //
///////////////////////////////////////////////////////
 
int main(int argc, char **argv){
    QApplication app(argc, argv);
    MainWindow win;
 
    win.show();
 
    return app.exec();
}
3
3 / 3 / 0
Регистрация: 22.05.2010
Сообщений: 77
15.08.2010, 16:08  [ТС] 12
Спасибо всем за помощб) Оч помогло) Все заработало как часы!!
Большая просьюа к модераторам ну и в часности к вам
easybudda,

Добавьте пожалст в FAQ подобную тему или это, потому что я так понял достаточно много подобных тем создается. Не только на этом форуме.
0
15.08.2010, 16:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.08.2010, 16:08
Помогаю со студенческими работами здесь

Переход с одной формы на другую
Нужно, чтобы после нажатия кнопки на одной форме, открывалась другая. когда пишу void...

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

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

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


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

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

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