多界面管理类(方便多界面的来回显示,以及界面回退)

在多界面的软件中,有时候各个不同的界面来回跳转,通过简单的信号与槽方法实现界面的显示以及隐藏感觉代码会很凌乱,看起来会有点费劲。这个时候你可能就需要一个界面管理类来实现界面的管理,方便你界面的显示、隐藏以及上一个界面的回退。也可以避免多界面的耦合事件发生,导致后期代码维护的困难。
因为本人也是第一次写这种类,可能里面会有很多不完善,希望做过的或者有其他建议的大佬,可以指出不足
一开始想着在这个类中,直接对各个界面进行实例化管理,负责界面的调度,后来在开发中发现,这种方法行不通,首先管理类和界面类的互相访问,头文件部分就会发生冲突,两边都引用各自的头文件后头文件部分的#ifndef #define #endif部分就不报错,报错类型 unterminated conditional directive
unterminated conditional directive
一开始查找这个错误,还在那一脸闷逼,说的都是什么,缺少#endif实践后才发现,这个原因也有可能是头文件相互嵌套导致的问题。
后来想着要不要在每个类中标记个什么字符串了,整型了作为唯一标识符,然后调用。最后又一想为什么要这么麻烦,为什么不直接在管理类中,标记两个字符串,一个作为当前要显示的界面,一个作为上个显示过的界面,然后根据要显示的类型直接发送信号,然后每个界面判断这个信号是不是要自己显示,是的话就显示,多简单,后来就这样直接做了,而且效果还不错。
但是有2点需要注意

  1. 最好管理类弄成单例模式,避免你界面太多,实例化太多造成资源浪费
  2. 一个信号多个界面接受,可能会造成界面显示延迟,估计应该不会太长

下面上代码:

.h文件

class ManageShowWidget:public QWidget
{
    Q_OBJECT
public:
    static ManageShowWidget* m_pManageShowWidget;
    static ManageShowWidget* getInstance();

    void getShowWidget();
    void setShowWidget(const QString& strShowWidget);

    void getOldShowWidget();
    void setOldWidget(const QString& strOldShowWidget);
signals:
    void emitShowWidget(QString);
    void emitOldShowWidget(QString);

private:
    ManageShowWidget();
    QString m_strShowWidget;
    QString m_strOldShowWidget;
};

.cpp文件

ManageShowWidget* ManageShowWidget::m_pManageShowWidget = nullptr;
ManageShowWidget* ManageShowWidget::getInstance()
{
    if(nullptr == m_pManageShowWidget)
        m_pManageShowWidget = new ManageShowWidget();
    return m_pManageShowWidget;
}

void ManageShowWidget::getShowWidget()
{
    emit emitShowWidget(m_strShowWidget);
}

void ManageShowWidget::setShowWidget(const QString &strShowWidget)
{
    m_strShowWidget = strShowWidget;
}

void ManageShowWidget::getOldShowWidget()
{
    emit emitOldShowWidget(m_strOldShowWidget);
}

void ManageShowWidget::setOldWidget(const QString &strOldShowWidget)
{
    m_strOldShowWidget = strOldShowWidget;
}

ManageShowWidget::ManageShowWidget()
    :m_strShowWidget("MainWidget")
    ,m_strOldShowWidget("MainWidget")
{

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值