我有一个具有以下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,并进行了实际尝试,但是问题是我必须编写所有代码来处理同一文件中的不同事件,并且各个窗口的操作菜单也不同。
救命!:)
我的建议是使用状态机来管理您的所有状态。扩展也很容易。
a。)定义必要的状态,例如,来宾,已登录,已注销。对于每个状态,您可能有3个对话框(我在这里定义了一个附加的注销对话框),将输入状态的信号连接到对话框的显示槽,并将连接状态的信号连接到对话框的隐藏槽。这样,您无需担心何时显示/隐藏对话框,而只需关注状态的转换。
b)。为对话框定义信号,例如,为loginWindow定义信号“ loggedIn”,为TasksWindow定义信号“ loggedOut”,添加由信号“ loggedIn”触发的从状态Guest到登录状态的转换。
C)。因此,状态机的初始状态为“访客”,进入此状态时,将显示您的loginWindow。验证登录信息后,将发出“ loggedIn”信号,并且计算机的状态将从“ guest”变为“ Logged In”,因此当退出“ Guest”状态时,loginWindow将被隐藏,并且TasksWindow将进入“已登录”状态时显示。
d)。您可以通过在TasksWindow中单击“注销”来结束会话,您还需要为状态更改定义分类。
e)。这里的一个窍门:您可以定义最终状态,并将状态机的“完成”或“停止”信号连接到应用程序的“退出”插槽。完成所有操作后,状态机将自动关闭该应用程序。
易于维护和扩展,通过使用状态机,逻辑非常清晰。
| 归档时间: |
|
| 查看次数: |
1959 次 |
| 最近记录: |