Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получить указатель на mainwindow, чтобы использовать методы в другом класс 
:(
    Опции темы
ЛунныйОборотень
Дата 19.7.2012, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Здравствуйте!

Есть такой вопрос- есть несколько классов, некоторые из них используют методы класса mainwindow .

Я делаю так:

В стороннем классе:
Код

Mainwindow my;
my.metod1();


Но ,как я понимаю, проблема в том что этим я создаю еще один полноценный экземпляр главного окна.Что мне совершенно не нужно!
Можно ли просто получить указатель на mainwindow ? Дабы через него просто вызывать методы из другого класса?

Спасибо.
PM MAIL   Вверх
loneybibi
Дата 19.7.2012, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 28.5.2010
Где: Донецк (Украина)

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



 ну как вариант при создании своего класса который использует методы mainwindow передать ему указатель! 
а потом использовать что то типа:
<static_cast>(MainWindow1)->my_proc1();
где "MainWindow1" = указателю на класс родителя ! 


--------------------
Red Hat Fedora 17
Qt 4.8.1 (x64), GCC 4.4.3,
G++ 4.4.3, QtCreator 2.4.1
PM MAIL ICQ   Вверх
bsa
Дата 19.7.2012, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



ЛунныйОборотень, в Qt для этих целей существует система сигнал/слот. Подумай, может лучше ее использовать? А если не выходит, то стоит пересмотреть архитектуру программы. Так как она, скорее всего, неверная - есть более правильный вариант организации.
PM   Вверх
math64
Дата 19.7.2012, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



Как правило - да, используй сигнал/слот.
Если всё же нужен указатель на MainWindow (или другие окна) - используй свой Application.
Код

class Application : public QApplication
{
    Q_OBJECT
public:
    explicit Application(int argc, char** args) : QApplication(argc, argv) {
    mainWindow = new MainWindow(NULL);
    }
    int Exec() {
    if (mainWindow != NULL)
        mainWindow->show();
    return QApplication::exec();
    }
    MainWindow* getMainWindow() { return mainWindow; }
private:
    MainWindow* mainWindow;
};

int main(int argc, char** argv)
{
    Application app(argc, argv);
    return app.Exec();
}


PM   Вверх
plica98
Дата 17.8.2012, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



У меня проблема такого плана.
Есть много (массив 2-3 тысячи) объектов, которые как-то должны реагировать на мышь. Объекты от производного класса
QGraphicsRectItem. Переписанный метод  mousePressEvent ловит нажатия кнопок мыши, а обработку хочу сделать в MainWindow.
Подскажите, пожалуйста, как мне лучше это реализовать: с помощью сигналов или просто вызовом метода из MainWindow по указателю.

Попробовал получить указатель как описано выше.

Не получилось. А в чем прорблема пока не понял.

Это сообщение отредактировал(а) plica98 - 17.8.2012, 10:06
PM MAIL   Вверх
math64
Дата 19.8.2012, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



plica98, наверняка ты не хочешь в MainWindow подписываться на сигнал от каждого графиксатема.
Поэтому, сделай класс, произмоводный от сцены и объяви в нем сигнал с параметром указатель на твой графиксатем.
Этот сигнал будет вызываться из mousePressEvent.
Тогда в MainWindow нужно подписываться на один сигнал.
В графиксатем знать указатель на MainWindow не нужно - нужен только указатель на сцену.
MainWindow знает указатель на сцену при построении своего ГУИ и связывает сигнал сцены со своим слотом.
PM   Вверх
plica98
Дата 20.8.2012, 07:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



math64, спасибо! Такие мысли меня посещали. 
Вы окончательно меня склонили к такой реализации.

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

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

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


 




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


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

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