当前位置:网站首页>Qt|多个窗口共有一个提示框类

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

2022-07-07 09:09:00 InfoQ

我们在用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,一名C++开发程序媛~
原网站

版权声明
本文为[InfoQ]所创,转载请带上原文链接,感谢
https://xie.infoq.cn/article/f8844016186fe75fa08385ecc