Qt C++在底层抛出状态信息,上层调用时对话框显示状态信息,应该怎么做

比如我现在有一个连接数据库的子模块,当数据库连接失败时,需要弹出对话框提示一下,但是不能在子模块中导入QMessageBox库,该怎么做!!!!
演示一下
这里只是演示一下,具体的要比这复杂得多

方法一:返回bool值,然后在主程序里判断bool值,弹出对应的对话框

第一步:创建一个子模块

#ifndef UNTITLEDHELPER_H
#define UNTITLEDHELPER_H
class Helper
{
public:
    static bool connectToDataBase(const int &flag);
};
#endif // UNTITLEDHELPER_H
#include "untitledhelper.h"
bool Helper::connectToDataBase(const int &flag)
{
    if (flag)
    {
        return true;
    }
    else
    {
        return false;
    }
}

第二步:合适的地方调用

#include "widget.h"
#include "ui_widget.h"
#include "untitledhelper/untitledhelper.h"

#include <QMessageBox>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_pushButton_clicked()
{
    if (!Helper::connectToDataBase(0))
    {
        QMessageBox::critical(this, "错误", "数据库连接失败");
    }
    else
    {
        QMessageBox::information(this, "正确", "数据库连接成功");
    }
}

运行结果
在这里插入图片描述

这种方式的缺点是返回bool值才会判断,具有局限性,

方法二:信号与槽的方式

这种方式需要大量连接信号和槽,不适用

方法三:传递参数法(实用,推荐)

第一步:创建一个子模块

#ifndef UNTITLEDHELPER_H
#define UNTITLEDHELPER_H
#include <QString>
class Helper
{
public:
    static void connectToDataBase2(const int &flag, QString *msg = nullptr);
};
#endif // UNTITLEDHELPER_H
void Helper::connectToDataBase2(const int &flag, QString *msg)
{
    if (flag && msg)
    {
        *msg = "连接成功";
        return true;
    }
    else
    {
        *msg = "数据库连接失败";
        return false;
    }
}

第二步:合适的地方调用

void Widget::on_pushButton_2_clicked()
{
    QString msg;
    int flag = 0;
    Helper::connectToDataBase2(flag, &msg);
    if (flag)
    {
        QMessageBox::information(this, "正确", msg);
    }
    else
    {
        QMessageBox::critical(this, "错误", msg);
    }
}

在这里插入图片描述

传递引用,运算完成后保存到全局变量

 // 根据角度值计算开度值
 // 计算两个数的除法
static void calculateDiv(const int &a, const int &b, int &result, QString *errorMessage = nullptr);
void Helper::calculateDiv(const int &a, const int &b, int &result, QString *errorMessage)
{
    if (b == 0)
    {
        // 指针非空时执行 指针值为 nullptr 时会被当作布尔值 false
        if (errorMessage)
        {
            *errorMessage = "除数不能为零";
            
        }
        return;
    }
    else
    {
        result = a / b;
    }
}

合适的地方调用

void Widget::on_pushButton_3_clicked()
{
    int reslut;
    QString msg;
    int a = ui->lineEdit->text().toInt();
    int b = ui->lineEdit_2->text().toInt();
    Helper::calculateDiv(a, b, reslut, &msg);
    if (b == 0)
    {
        QMessageBox::critical(this, "错误", msg);
        return;
    }
    ui->lineEdit_3->setText(QString::number(reslut));
}

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值