crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> логика использования QMidArea, нужно вызвать слот активного документа
reseacher2011
  опции профиля:
сообщение 11.9.2011, 13:23
Сообщение #1


Новичок


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

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




Репутация:   0  


Пока в тестовом примере пробую так распознать тот документ слот которого нужно вызвать:

в конструкторе главного окна приложения
  ws = new QMdiArea;
  setCentralWidget(ws);
  DocWindow* dw     = new DocWindow;
  ws->addSubWindow(dw);
  connect(pactSave,SIGNAL(triggered()),this,SLOT(slotSave()));
  DocWindow* mw2     = new DocWindow;
  ws->addSubWindow(dw2);
  ws->setActiveSubWindow(qobject_cast<QMdiSubWindow*>(dw2));


void MDIProgram::slotSave(){
  DocWindow* cw = qobject_cast<DocWindow*>(ws->activeSubWindow());
  if(cw) {
     cw->slotSave();
  } else {
     std::cerr << "no active sub win \n";
  }
}


указатель cw содержит ноль, т.к. в консоле печатается no active sub wn.

Что делаю не так?

P.S. может нужно QSignalMapper, но мне непонятно зачем?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 12.9.2011, 17:15
Сообщение #2


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

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

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




Репутация:   94  


в слоте можно узнать кто послал сигнал:
QObject *o = sender();
Ну а за тем проверить является ли объект субокном или нет

Цитата(reseacher2011 @ 11.9.2011, 16:23) *
ws->setActiveSubWindow(qobject_cast<QMdiSubWindow*>(dw2));
зачем здесь приведение типа?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 27.12.2024, 3:28