![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Daan |
![]()
Сообщение
#1
|
Студент ![]() Группа: Новичок Сообщений: 11 Регистрация: 13.9.2010 Пользователь №: 2033 Спасибо сказали: 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 уже создан ![]() |
|
|
ufna |
![]()
Сообщение
#2
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 362 Регистрация: 24.5.2008 Из: Курган/СПб Пользователь №: 182 Спасибо сказали: 29 раз(а) Репутация: ![]() ![]() ![]() |
Посмотри технологию сигнал-слот.
В "first" будет слот, в "second" сигнал. В нужный момент отсылаешь сигнал, а слот - и есть нужная тебе функция. |
|
|
Daan |
![]()
Сообщение
#3
|
Студент ![]() Группа: Новичок Сообщений: 11 Регистрация: 13.9.2010 Пользователь №: 2033 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Так и сделал, но чего-то не хватает.
Вообщем во вложении то, о чем я говорю. Мне надо чтобы при нажатии кнопки SET TEXT, принадлежащей второму окну, в первом окне происходи вызов функции, которая устанавливает текст в QLineEdit код тут |
|
|
Алексей1153 |
![]()
Сообщение
#4
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2939 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
попробуй так. Изменённые места помечены //<<<<<<
а ещё не забудь освободить памать из-под s
Как вариант:
И флаги лучше не цифрой указывать, а константой Qt::WindowFlags f = Qt::WindowShadeButtonHint |
|
|
Daan |
![]()
Сообщение
#5
|
Студент ![]() Группа: Новичок Сообщений: 11 Регистрация: 13.9.2010 Пользователь №: 2033 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Спасибо большое за ответ.
А кстати насчет освобождения памяти после void First::OPEN(){ s = new Second; s->show(); } В какой момент можно выполнять delete s; Может быть после закрытия второго окна ? А если в функцию OPEN() вставить проверку указывает ли s на виджет, который уже создан, и тогда просто вызывать s->show(); Или никак не проверить ? |
|
|
Алексей1153 |
![]()
Сообщение
#6
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2939 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
Может быть после закрытия второго окна ? ну, в принципе, да ) А если в функцию OPEN() вставить проверку указывает ли s на виджет, который уже создан, и тогда просто вызывать s->show(); Или никак не проверить ? технически можно, но нужно ли - это зависит от логики твоего алгоритма. Которого никто, кроме тебя, не знает ) |
|
|
Daan |
![]()
Сообщение
#7
|
Студент ![]() Группа: Новичок Сообщений: 11 Регистрация: 13.9.2010 Пользователь №: 2033 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Да, действительно)
Second::Second(First* pF,QWidget* pwgt,Qt::WindowFlags f) : QWidget(pwgt,f) А не подскажете, для чего служит эта часть: : QWidget(pwgt,f) ? |
|
|
Litkevich Yuriy |
![]()
Сообщение
#8
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Алексей1153 |
![]()
Сообщение
#9
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2939 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
Daan, это таким образом реализована передача параметров в конструктор родительского класса (вообще, в списке инициализации не только конструктор родителя можно вызвать, но и конструкторы членов-переменных класса)
|
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 5.12.2023, 14:30 |