Qt多个窗口共有一个提示框类
我们在用QT做开发的时候会发现,很多情况下需要弹一些提示框告诉用户一些信息。
一般情况下我们会直接想到,使用QMessageBox直接提示不就好了。
但是在一些大的项目里面,为了更好的显示效果,UI美工会做出一些好看的提示页面,如果这样的话,就需要我们自己定义一个提示框类了。
尤其是我们的程序不再是可控的时候,阻塞的MessageBox消息很明显就是一个弊端了。
假设现在大一点的项目需要平板与PC机交互。
由平板来触发PC机的一些操作,最简单的我们可以使用TCP通讯,那么当平板触发PC机消息出错时,你觉得用阻塞的方式弹提示框,这样子稳妥吗?
显而易见,根据实际情况肯定是不可以的。
那么我们需要对这个提示框类做处理,不再是继承QDialogEx,而是QWidget了。
为了做到多个页面都兼容这个提示框类,难道要每个页面都new一个这样的提示框类吗?
这样子,也是比较消耗资源的,这种做法也是不采取的。
我们在开发的项目中,定义一个全局的提示框类,假设叫做:QTipsInforWidget
首先,创建当前提示框类
QTipsInforWidget *m_TipsDlg = new QTipsInforWidget; m_TipsDlg->hide();
默认不显示当前页面,而且不给该指定任何父窗口。这是重点。
那不指定父窗口,该显示到哪个页面上呢?
当我们哪个窗口再调用该类的时候,再给该提示框类指定具体的父窗口信息
m_TipsDlg->setTips("提示内容", this);
我们在QTipsInforWidget::setTips的具体操作,如下:
QTipsInforWidget::setTips(QString qsTips, QWidget* widgetParent) { this->setParent(widgetParent); //具体的现实操作 }
这样的操作,就实现了多个窗口可以公用一个提示框类,并且该提示框类属于当前窗口。
其实,看到这里,很多人就说,一个程序只考虑每次只弹一个提示框,那么要是想顺序的提示信息,或者是一次性触发多个提示信息,该如何解决呢?(哈哈,先留一个疑惑,这个问题下次说明啦~)
记得最重要的一点是,在关闭主程序的时候,一定要将提示框的父类置nullptr,否则程序崩溃你都无从下手。
在整个项目中,保证唯一的new以及唯一的delete,并且new的时候没有父窗口,当我们销毁的时候也不要将该类附着在任意一个窗口上。
避免了,指定的父窗口指针已经消息了,但是你得提示框类才保留着该父指针,不崩溃就怪了~
好了,今天的更新就到这里了,多个窗口简单调用一个提示框类信息~
作者:中国好公民st
链接:https://juejin.cn/post/7028370136654905358