2013-08-23 1 views
1

У меня есть пример приложения с использованием Qt и интерфейса нескольких документов. В главном окне в панель меню добавляются действия, например, действие для сохранения текущего документа, как только пользователь активирует это действие. Существует класс документа, который должен быть указан, чтобы сохранить документ. К сожалению, текущий документ может измениться (его МНОЖЕСТВЕННЫЙ интерфейс документа), поэтому нелегко использовать механизм сигнала-слота. Я не знаю, к какому экземпляру документа я должен подключить сигнал.Как подключить сигнал к изменяющемуся слоту

Приведенное здесь приложение связывает сигнал с фиктивным слотом в главном окне, и этот слот перенаправляет запрос соответствующему методу в класс документа, запрашивая текущий документ и вызывая соответствующий метод этого экземпляра. Это вызывает много шаблонов.

Есть ли более элегантный способ решить эту проблему?

Вот несколько строк кода, чтобы сделать вопрос яснее:

MainWindow:

connect(action, SIGNAL(activated()), this, SLOT(onSaveFile())); 

void MainWindow::onSaveFile() 
{ 
getCurrentDocument()->save(); 
} 

Документ:

void Document::save() 
{ 
... 
} 

Большое спасибо!

Bye, Benjamin

ответ

0

Если вы используете QMdiArea, вы можете слушать subWindowsActivated сигнала и восстановить свои сигналы и слоты там.

connect(QMdiArea, SIGNAL(subWindowsActivated(QMdiSubWindow*), this, SLOT(subWindowChanged(QMdiSubWindow*)) 

void MainWindow::subWindowChanged(QMdiSubWindow* newSubWindow) { 
    // Update the signals to point to the new subwindow 
} 
+0

я вижу. Это стандартный способ сделать это? – user2492801

+0

Я не знаю, стандартный ли он, я никогда не использовал mdi. Я знаю только, что это возможность. – MEeken

 Смежные вопросы

  • Нет связанных вопросов^_^