写点什么

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

  • 2022 年 7 月 07 日
  • 本文字数:960 字

    阅读完需:约 3 分钟

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,一名 C++开发程序媛~

发布于: 刚刚阅读数: 4
用户头像

书山有路勤为径,学海无涯苦作舟 2022.07.01 加入

擅长语言:C++ 涉及语言:Python

评论

发布
暂无评论
Qt|多个窗口共有一个提示框类_qt_中国好公民st_InfoQ写作社区