• Qt|多个窗口共有一个提示框类


    我们在用QT做开发的时候会发现,很多情况下需要弹一些提示框告诉用户一些信息。

    一般情况下我们会直接想到,使用QMessageBox直接提示不就好了。

    但是在一些大的项目里面,为了更好的显示效果,UI美工会做出一些好看的提示页面,如果这样的话,就需要我们自己定义一个提示框类了。

    尤其是我们的程序不再是可控的时候,阻塞的MessageBox消息很明显就是一个弊端了。

    假设现在大一点的项目需要平板与PC机交互。

    由平板来触发PC机的一些操作,最简单的我们可以使用TCP通讯,那么当平板触发PC机消息出错时,你觉得用阻塞的方式弹提示框,这样子稳妥吗?

    显而易见,根据实际情况肯定是不可以的。

    那么我们需要对这个提示框类做处理,不再是继承QDialogEx,而是QWidget了。

    为了做到多个页面都兼容这个提示框类,难道要每个页面都new一个这样的提示框类吗?

    这样子,也是比较消耗资源的,这种做法也是不采取的。

    我们在开发的项目中,定义一个全局的提示框类,假设叫做:QTipsInforWidget

    首先,创建当前提示框类

    1. QTipsInforWidget *m_TipsDlg = new QTipsInforWidget;
    2. m_TipsDlg->hide();


    默认不显示当前页面,而且不给该指定任何父窗口。这是重点。

    那不指定父窗口,该显示到哪个页面上呢?

    当我们哪个窗口再调用该类的时候,再给该提示框类指定具体的父窗口信息

    m_TipsDlg->setTips("提示内容", this);

    我们在QTipsInforWidget::setTips的具体操作,如下:

    1. QTipsInforWidget::setTips(QString qsTips, QWidget* widgetParent)
    2. {
    3. this->setParent(widgetParent);
    4. //具体的现实操作
    5. }

    这样的操作,就实现了多个窗口可以公用一个提示框类,并且该提示框类属于当前窗口。

    其实,看到这里,很多人就说,一个程序只考虑每次只弹一个提示框,那么要是想顺序的提示信息,或者是一次性触发多个提示信息,该如何解决呢?(哈哈,先留一个疑惑,这个问题下次说明啦~)

    记得最重要的一点是,在关闭主程序的时候,一定要将提示框的父类置nullptr,否则程序崩溃你都无从下手。

    在整个项目中,保证唯一的new以及唯一的delete,并且new的时候没有父窗口,当我们销毁的时候也不要将该类附着在任意一个窗口上。

    避免了,指定的父窗口指针已经消息了,但是你得提示框类才保留着该父指针,不崩溃就怪了~

    好了,今天的更新就到这里了,多个窗口简单调用一个提示框类信息~

  • 相关阅读:
    H.264编码及AAC编码基础
    SpringBoot之静态资源规则与定制化
    nVisual数字基础设施运营管理软件平台
    Linux:进度条(小程序)以及git三板斧
    css_css3新特性
    Zenmap - 可视化Nmap的使用
    使用aidlux进行模型迁移、部署、推理
    选择排序(简单选择排序和堆排序)
    SpringBoot实例类-@Data
    AP5101C 高压线性恒流IC 宽电压6-100V LED汽车大灯照明 台灯LED矿灯 指示灯电源驱动
  • 原文地址:https://blog.csdn.net/qq_32716885/article/details/126281709