2013-08-15 5 views
0

У меня есть QMainWindow (называемый mainWindow), где пользователь может ввести несколько тигров, например путь к файлу и т. Д. Затем пользователь может открыть другое окно (называемое secondWindow), нажав на кнопку, do что-то там и, наконец, вернется в первое окно.Закрытие окна в Qt4

открыть второе окно и скрыть первый подобное:

secondWindow *sw = new secondWindow; 
sw->show(); 
this->hide(); //hide the mainWindow 

Когда пользователь возвращается в MainWindow, все вещи, которые он написал до того, как имя пути упоминалось выше, все равно должны быть там. Поэтому мой вопрос: как мне закрыть secondWindow и вернуться к mainWindow правильно?

EDIT: StatusBars ans ToolBars Используются. И да, мне нужны два окна (на самом деле у меня даже больше двух).

ответ

0

Вы можете излучать сигнал от closeEvent of secondWindow и подключать этот сигнал к слоту show() mainWindow.

secondWindow.h:

public: 
virtual void closeEvent (QCloseEvent * event) 
{ 
    emit secondWindowClosed(); 
    QWidget::closeEvent(event); 
} 
signals: 
void secondWindowClosed(); 

mainwindow.cpp:

secondWindow *sw = new secondWindow; 
connect(sw, SIGNAL(secondWindowClosed()), this, SLOT(show())); 
sw->show(); 
this->hide(); //hide the mainWindow 
+0

спасибо, это то, что я искал. – user2025406

0

, если не с помощью функций из QMainWindow, как QStatusBar или QToolbar для меня лучшим выбором будет использовать QDialog и вызвать QDialog::exec().

будет отображаться модально, поэтому пользователь должен закрыть диалоговое окно, прежде чем снова взаимодействовать с mainWindow.

Другой способ - испустить сигнал при закрытии secondWindow и освободить все ресурсы, если необходимо. :

void secondWindowClosing(void)//SLOT in mainWindow called by SIGNAL closing() or whatever from secondWindow 
{ 
    secondWindow* wnd = qobject_cast<secondWindow*>(QObject::sender()); 
    if (!wnd) // if the SLOT was called not using signals/slots (may not be needed) 
     return; 
    // get your information of the secondWindow 
    wnd->deleteLater(); // deletes wnd, after the application returns to the event loop 
    this->show(); // display the mainWindow again 
} 
0

Вам действительно нужны два окна? Я бы использовал QStackedWidget. Один QMainWindow, который получает в качестве центрального виджета QStackedWidget. В QStackedWidget ваши элементы управления для вашего первого и второго окна.

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