在Qt中的应用程序窗口之间切换的最佳实践是什么?

sab*_*our 3 qt symbian

我有一个具有以下UI形式的应用程序,这些形式来自QMainWindow

  • 登录窗口
  • 任务窗口
  • 详细信息窗口

我应该登录到LoginWindow中的应用程序,然后将其移至TasksWindow。在TasksWindow中,我将从组合框中选择一个项目,然后移至DetailsWindow并填充与该项目相关的数据。在DetailsWindow上,我将执行菜单操作,以使我返回TasksWindow。

目前,我的想法(以及我尝试过的)是这样的。在main.cpp中:

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    LoginWindow loginWindow;
    loginWindow.showMaximized();

    return app.exec();
}
Run Code Online (Sandbox Code Playgroud)

并在LoginWindow按钮中:

void LoginWindow::on_loginButton_clicked()
{
        this->hide(); // hide the login window
        TasksWindow tasksWindow;
        tasksWindow.showMaximized();
}
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?它变得难以管理,因为现在我必须包括对我应该去的每个窗口类的引用,可能会创建循环引用!

请注意,我正在这样做,并将应用程序编译为Qt Symbian应用程序。

在应用程序窗口之间切换的最佳方法是什么?我曾考虑过使用QStackedWidget,并进行了实际尝试,但是问题是我必须编写所有代码来处理同一文件中的不同事件,并且各个窗口的操作菜单也不同。

救命!:)

Mas*_*ang 5

我的建议是使用状态机来管理您的所有状态。扩展也很容易。

  1. 阅读Qt帮助中的State Machine Framework文档。
  2. 了解Qt状态机框架的基本知识后,您可能会了解以下方法。

a。)定义必要的状态,例如,来宾,已登录,已注销。对于每个状态,您可能有3个对话框(我在这里定义了一个附加的注销对话框),将输入状态的信号连接到对话框的显示槽,并将连接状态的信号连接到对话框的隐藏槽。这样,您无需担心何时显示/隐藏对话框,而只需关注状态的转换。

b)。为对话框定义信号,例如,为loginWindow定义信号“ loggedIn”,为TasksWindow定义信号“ loggedOut”,添加由信号“ loggedIn”触发的从状态Guest到登录状态的转换。

C)。因此,状态机的初始状态为“访客”,进入此状态时,将显示您的loginWindow。验证登录信息后,将发出“ loggedIn”信号,并且计算机的状态将从“ guest”变为“ Logged In”,因此当退出“ Guest”状态时,loginWindow将被隐藏,并且TasksWindow将进入“已登录”状态时显示。

d)。您可以通过在TasksWindow中单击“注销”来结束会话,您还需要为状态更改定义分类。

e)。这里的一个窍门:您可以定义最终状态,并将状态机的“完成”或“停止”信号连接到应用程序的“退出”插槽。完成所有操作后,状态机将自动关闭该应用程序。

易于维护和扩展,通过使用状态机,逻辑非常清晰。