crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> доступ к функциям класса
Daan
  опции профиля:
сообщение 13.9.2010, 14:26
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 11
Регистрация: 13.9.2010
Пользователь №: 2033

Спасибо сказали: 0 раз(а)




Репутация:   0  


Имеются два класса, class FIRST и class SECOND, наследуемые от QWidget.
Описаны и определены соответственно в файлах firstclass.h + firstclass.cpp и secondclass.h + secondclass.cpp
Класс FIRST, чей конструктор объявлен в firstclass.h включает #include "secondclass.h" и имеет среди членов
указатель на объекта класса SECOND, например SECOND s*;
Затем в функции main создается объект класса FIRST и появляется окно. Затем при выполнении какой-то функции класса FIRST создается через указатель s* объект класса SECOND и появляется отдельное окно - виджет класса SECOND
Задача такова:
Мне теперь нужно после выполнения определенной функции класса SECOND, описание которой находится в secondclass.cpp вызвать определенную функцию ( допустим функция void take_control() ) класса FIRST, которая описана в файле firstclass.cpp.
(Она будет обрабатывать данные из общего массива, который изменялся во втором окне и рамещать их в первом окне)

Как мне получить доступ к функциям уже созданного объекта класса FIRST из класса SECOND ?
Меня смущает то, что объект класса FIRST уже создан :unsure:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ufna
  опции профиля:
сообщение 13.9.2010, 14:36
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 362
Регистрация: 24.5.2008
Из: Курган/СПб
Пользователь №: 182

Спасибо сказали: 29 раз(а)




Репутация:   5  


Посмотри технологию сигнал-слот.

В "first" будет слот, в "second" сигнал. В нужный момент отсылаешь сигнал, а слот - и есть нужная тебе функция.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Daan
  опции профиля:
сообщение 13.9.2010, 20:48
Сообщение #3


Студент
*

Группа: Новичок
Сообщений: 11
Регистрация: 13.9.2010
Пользователь №: 2033

Спасибо сказали: 0 раз(а)




Репутация:   0  


Так и сделал, но чего-то не хватает.
Вообщем во вложении то, о чем я говорю. Мне надо чтобы при нажатии кнопки SET TEXT, принадлежащей второму окну, в первом окне происходи вызов функции, которая устанавливает текст в QLineEdit

код тут
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 13.9.2010, 21:11
Сообщение #4


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


попробуй так. Изменённые места помечены //<<<<<<
class First : public QWidget, public Ui::Bobkova
{
    Q_OBJECT

public slots:
    void OPEN();
    void SETTEXT();
};

void First::OPEN()
{
s = new Second(this);//<<<<<<
s->show();
}

void First::SETTEXT()
{
lineEdit->setText("O'KEY");
}


class Second : public QWidget, public Ui::Nagaeva
{
    Q_OBJECT

public:
    Second(First* pF,QWidget* pwgt = 0, Qt::WindowFlags f = 0x00020000);//<<<<<<
};

Second::Second(First* pF,QWidget* pwgt,Qt::WindowFlags f) : QWidget(pwgt,f) //<<<<<<
   {
  
    setupUi(this);
    setFixedSize(300, 300);
    connect(pushButton, SIGNAL(clicked()),pF, SLOT(SETTEXT()));//<<<<<<
}




а ещё не забудь освободить памать из-под s
s = new Second;



Как вариант:

Second::Second(First* pF,Qt::WindowFlags f) : QWidget(pF,f) //<<<<<<
{
...



И флаги лучше не цифрой указывать, а константой

Qt::WindowFlags f = 0x00020000
Qt::WindowFlags f = Qt::WindowShadeButtonHint

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Daan
  опции профиля:
сообщение 14.9.2010, 15:46
Сообщение #5


Студент
*

Группа: Новичок
Сообщений: 11
Регистрация: 13.9.2010
Пользователь №: 2033

Спасибо сказали: 0 раз(а)




Репутация:   0  


Спасибо большое за ответ.
А кстати насчет освобождения памяти после
void First::OPEN(){
s = new Second;
s->show();
}

В какой момент можно выполнять
delete s;

Может быть после закрытия второго окна ?
А если в функцию OPEN() вставить проверку указывает ли s на виджет, который уже создан, и тогда просто вызывать s->show(); Или никак не проверить ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 14.9.2010, 18:25
Сообщение #6


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(Daan @ 14.9.2010, 18:46) *
Может быть после закрытия второго окна ?

ну, в принципе, да )

Цитата(Daan @ 14.9.2010, 18:46) *
А если в функцию OPEN() вставить проверку указывает ли s на виджет, который уже создан, и тогда просто вызывать s->show(); Или никак не проверить ?

технически можно, но нужно ли - это зависит от логики твоего алгоритма. Которого никто, кроме тебя, не знает )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Daan
  опции профиля:
сообщение 15.9.2010, 21:02
Сообщение #7


Студент
*

Группа: Новичок
Сообщений: 11
Регистрация: 13.9.2010
Пользователь №: 2033

Спасибо сказали: 0 раз(а)




Репутация:   0  


Да, действительно)

Second::Second(First* pF,QWidget* pwgt,Qt::WindowFlags f) : QWidget(pwgt,f)

А не подскажете, для чего служит эта часть: : QWidget(pwgt,f) ?

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.9.2010, 21:04
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Daan @ 16.9.2010, 1:02) *
А не подскажете, для чего служит эта часть: : QWidget(pwgt,f) ?
для инициализации базового класса, почитай книжки по Си++
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 15.9.2010, 21:23
Сообщение #9


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Daan, это таким образом реализована передача параметров в конструктор родительского класса (вообще, в списке инициализации не только конструктор родителя можно вызвать, но и конструкторы членов-переменных класса)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 16.4.2024, 8:54