比如我现在有一个连接数据库的子模块,当数据库连接失败时,需要弹出对话框提示一下,但是不能在子模块中导入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));
}