Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [qt4.4] Передача параметров между формами 
:(
    Опции темы
GrishinUS
Дата 23.10.2008, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 5.9.2006
Где: Самара

Репутация: нет
Всего: нет



Добрый день!

Я тут народ из раздела "С++ для новичков" уже напугал, запощщу сюда, а то там что-то никто не отвечает. Да и вопрос правда больше по qt...

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

первая форма :
dialogimpl.h
Код

#include "ui_dialog.h" // <= здесь размещен QLabelEdit txt1 и он виден из dialogimpl.cpp
#include "DoInImpl.h"

//
class DialogImpl : public QDialog, public Ui::Dialog
{
Q_OBJECT

//****
public slots:
    int calculate();
//****

public:
    DialogImpl( QWidget * parent = 0, Qt::WFlags f = 0 );    

private slots:
    int DoIn();
    int DoOut();
};


фрагмент dialogimpl.cpp где доступно поле txt1



Код

int DialogImpl::calculate()
{    
    .....
    txt1->setText("987"); // отрабатывает нормально
        .....
    
    return 0;
}



вторая форма :
DoInImpl.h
Код

#include "dialogimpl.h"
#include "ui_dlgDoIn.h"

class DoInImpl : public QDialog, public Ui::dlgDoIn
{
Q_OBJECT

public slots:
    int RarusRequest();
    int WriteIntoInOut(const QModelIndex& qIndex);
public:
    DoInImpl(QWidget * parent = 0, Qt::WFlags f = 0 );

private:
    QSqlQueryModel *model;
    Ui::dlgDoIn ui;
};


пишу в методе WriteIntoInOut
Код


#include "DoInImpl.h"
int DoInImpl::WriteIntoInOut(const QModelIndex& qIndex)
{
    txt1->setText("734yfsdufgsjdj");
    return 0;
}


ошибка при компиляции :
Код

src/DoInImpl.cpp: In member function `int DoInImpl::WriteIntoInOut(const QModelIndex&)':
src/DoInImpl.cpp:111: error: `txt1' was not declared in this scope


PM MAIL ICQ   Вверх
feanor59
Дата 23.10.2008, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 24.1.2008
Где: Пермь

Репутация: нет
Всего: нет



сигнал-слоты для того и существуют. это, имхо, самый правильный способ в твоей ситуации. можно конечно сделать видимым в классе DoInImpl объект класса DialogImpl, при этом txt1 должен быть пабликом (что не тру), либо должны быть публичные функции доступа к txt1, НО, опять же, так писать плохо). концепция подразумевает использование сигнал-слотов.
PM MAIL ICQ GTalk   Вверх
fryConstantine
Дата 23.10.2008, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 18.9.2008

Репутация: нет
Всего: нет



Цитата

, при этом txt1 должен быть пабликом (что не тру)

тут я согласен
Цитата

либо должны быть публичные функции доступа к txt1

а что плохого в том чтобы сделать паблик-метод?в этом вроде и заключается принцип инкапсуляции....
PM MAIL   Вверх
GrishinUS
Дата 23.10.2008, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 5.9.2006
Где: Самара

Репутация: нет
Всего: нет



Цитата(feanor59 @ 23.10.2008,  10:58)
сигнал-слоты для того и существуют. это, имхо, самый правильный способ в твоей ситуации. можно конечно сделать видимым в классе DoInImpl объект класса DialogImpl, при этом txt1 должен быть пабликом (что не тру), либо должны быть публичные функции доступа к txt1, НО, опять же, так писать плохо). концепция подразумевает использование сигнал-слотов.

ок. Где делать connect()? В main?
PM MAIL ICQ   Вверх
feanor59
Дата 23.10.2008, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 24.1.2008
Где: Пермь

Репутация: нет
Всего: нет



2fryConstantine: мм, о паблик методах и речь. методы это функции класса (ну да, не мовсем традиционная трактовка, но в общем верная), а txt1 это данные, вот к данным паблик доступ давать не тру. 
или ты имеешь ввиду, почему этот подход тут не уместен? ну, как я понимаю объект диалог не создаётся в DoInImpl, значит и видно его там быть не должно. почему так... мне кажется обратное семантической ошибкой (именно в контексте Qt и форм), т. е. так делать можно, но не с формами в ктsmile 
зы
хотя это имхо конечно.

2GrishinUS: connect писать там, где либо создаются обы объекта, либо там, где они обы видны.
PM MAIL ICQ GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0495 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.