0

我有一个QMainWindow(称为 mainWindow),用户可以在其中输入多个内容,例如文件的路径等。然后用户可以通过单击按钮打开另一个窗口(称为 secondWindow),在那里执行某些操作,最后返回到第一个窗口.

我打开第二个窗口并像这样隐藏第一个窗口:

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

当用户返回到 mainWindow 时,他之前配置的所有东西,比如上面提到的路径名,应该仍然存在。所以我的问题是:如何关闭 secondWindow 并正确返回 mainWindow?

编辑:使用StatusBarsans ToolBars。是的,我确实需要两个窗口(实际上我什至有两个以上)。

4

3 回答 3

0

如果不使用QMainWindow,喜欢QStatusBarQToolbar对我来说最好的选择是使用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
}
于 2013-08-15T09:37:07.897 回答
0

你真的需要两个窗口吗?我会使用 QStackedWidget。一个 QMainWindow,它作为中央小部件获得一个 QStackedWidget。在 QStackedWidget 中,您的第一个和第二个窗口的控件。

于 2013-08-15T09:51:50.453 回答
0

您可以从 secondWindow 的 closeEvent 发出信号,并将此信号连接到 mainWindow 的 show() 插槽。

第二个窗口.h:

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

主窗口.cpp:

secondWindow *sw = new secondWindow;
connect(sw, SIGNAL(secondWindowClosed()), this, SLOT(show()));
sw->show();
this->hide(); //hide the mainWindow
于 2013-08-15T10:52:06.657 回答