Qml页面管理的一种方法

这篇博客介绍了一种使用C++管理QML页面的方法,通过VGMainPage类实现页面的添加、删除、切换等功能。VGMainPage类包含QML页面栈管理,提供了设置当前页面、检查页面可见性等API。同时,它还处理了页面的生命周期,确保页面正确地添加到视图和从视图中移除。
摘要由CSDN通过智能技术生成

qml写界面的时候,很有可能会多个页面跳来跳去,很多时候需要逐级回退,这里我提供一种方法,页面使用c++管理

#include <QObject>
#include <QList>
#include <QColor>
#include <QFont>

class VGQmlViewItem : public QObject
{
    Q_OBJECT
public:
    VGQmlViewItem(QObject *item, VGQmlViewItem *parent = NULL);
    ~VGQmlViewItem();
    void AddChild(QObject *qmlObj);
    QObject *QmlObject()const;
    VGQmlViewItem *FindQmlObjectItem(const QObject *item);
    QString GetName()const;
    VGQmlViewItem *GetParent()const;
    void RemoveItem(QObject *qmlObj);
private:
    VGQmlViewItem *findQmlObjectItem(const QObject *item)const;
private slots:
    void onQmldestroyed();
private:
    QObject                 *m_qmlObject;
    QList<VGQmlViewItem*>   m_children;
};

class VGMainPage : public QObject
{
    Q_OBJECT
    
    Q_PROPERTY(int qmlRootWidth READ qmlRootWidth WRITE setQmlRootWidth NOTIFY qmlRootWidthChanged)
    Q_PROPERTY(int qmlRootHeight READ qmlRootHeight WRITE setQmlRootHeight NOTIFY qmlRootHeightChanged)
    Q_PROPERTY(QColor backColor READ GetBackColor WRITE SetBackColor NOTIFY backColorChanged)
    Q_PROPERTY(QColor bgColor READ GetBackGroundColor CONSTANT)
    Q_PROPERTY(QString qmlTip READ GetQmlTip NOTIFY qmlTipChanged)
    Q_PROPERTY(QString messgeTip READ GetMessgeTip NOTIFY messgeTipChanged)
    Q_PROPERTY(bool tipVisible READ IsTipVisible NOTIFY tipVisibleChanged)
    Q_PROPERTY(bool tipWarn READ IsTipWarn NOTIFY tipWarnChanged)
    //是否横屏
    Q_PROPERTY(bool landscape READ landscape WRITE setLandscape NOTIFY landscapeChanged)
    Q_PROPERTY(bool titleVisible READ GetTitleVisible WRITE SetTitleVisible NOTIFY titleVisibleChanged)
    Q_PROPERTY(QString headerName READ headerName WRITE setHeaderName NOTIFY headerNameChanged)
    Q_PROPERTY(QObject* curQmlPage READ GetCurQmlPage WRITE SetCurrentQmlPage NOTIFY sigShowPage)
    Q_PROPERTY(bool showText READ IsShowText WRITE SetShowText NOTIFY showTextChanged)
    Q_PROPERTY(bool showImage READ IsShowImage WRITE SetShowImage NOTIFY showImageChanged)
    Q_PROPERTY(bool showSrSt READ IsShowSrSt CONSTANT)
public:
    enum ButtonShowStayle
    {
        Show_Imge = 1,
        Show_Text = 2,
        Show_ImgeAndText = Show_Imge|Show_Text,
    };
public:
    explicit VGMainPage(QObject *parent = 0);
    ~VGMainPage();

    Q_INVOKABLE void setScreenHoriz(bool b = false);
    Q_INVOKABLE QString getTimeString(qint64 tMs, const QString &format = "yyyy-MM-dd hh:mm:ss");
    Q_INVOKABLE QFont   font(bool bBold = false);
    Q_INVOKABLE QString getImageProviderUrl(const QString &name, bool enable = true, bool press = false);
    Q_INVOKABLE qreal fontHeight(const QFont &f);
    Q_INVOKABLE qreal stringWidth(const QFont &f, const QString &str);
public:
    int qmlRootWidth()const;
    void setQmlRootWidth(int width);

    int qmlRootHeight()const;
    void setQmlRootHeight(int height);

    void setFont(const QFont &font);

    bool landscape()const { return m_landscape;}
    void setLandscape(bool landscape);

    QString headerName()const { return m_headerName; }
    void setHeaderName(const QString &name);

    void SetCurrentQmlPage(QObject *qmlPage);
    QObject *GetCurQmlPage()const;

    void SetQmlTip(const QString &tip, bool bWarn);
    void SetMessageBox(const QString &tip);
    QColor  GetBackGroundColor()const;
    bool IsShowSrSt()const;
protected:
    bool    IsShowText()const;
    void    SetShowText(bool b);
    bool    IsShowImage()const;
    void    SetShowImage(bool b);
    QColor  GetBackColor()const;
    void    SetBackColor(const QColor &);
    bool    GetTitleVisible()const;
    void    SetTitleVisible(bool b);
    bool    IsTipVisible()const;
    QString GetQmlTip()const;
    QString GetMessgeTip() const;
    bool    IsTipWarn()const;

    Q_INVOKABLE QFont   miniFont(bool bBold = false);
    Q_INVOKABLE QFont   littleFont(bool bBold = false);
    Q_INVOKABLE QFont   biggerFont(bool bBold = false);
    Q_INVOKABLE QFont   largeFont(b

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值