// 管理变量的类 class VariableManager : public QObject { Q_OBJECT public: VariableManager(QObject *parent = nullptr) : QObject(parent) {} // 获取变量的函数 int getValue() const { return m_value; } // 设置变量的函数 void setValue(int value) { m_value = value; emit valueChanged(m_value); // 发射信号 } signals: // 变量被更新时发射的信号 void valueChanged(int newValue); private: int m_value = 0; }; // 多个人访问变量的类 class AccessManager : public QObject { Q_OBJECT public: AccessManager(VariableManager *variable, QObject *parent = nullptr) : QObject(parent), m_variable(variable) { // 连接变量更新信号,以便在变量更新时立即获取最新的值 connect(m_variable, &VariableManager::valueChanged, this, &AccessManager::onValueChanged); } public slots: // 获取变量的槽函数 int getValue() const { return m_variable->getValue(); } // 设置变量的槽函数 void setValue(int value) { m_variable->setValue(value); } private slots: // 当变量被更新时被调用的槽函数 void onValueChanged(int newValue) { // 在这里可以做一些处理,例如打印日志等 } private: VariableManager *m_variable; };修改该代码,并使其适用于void menu::on_spinBox_valueChanged(int value) { int inventory_1; // 设置库存初始值 inventory_1 -= value; // 根据spinBox的值更新库存 ui->label_3->setText("库存:" + QString::number(inventory_1)); if(ui->spinBox->value()>= 114) {QMessageBox::warning(this, "嘿", "你居然全要了!");} }的inventory_1,初始值是114
时间: 2024-02-19 09:59:15 浏览: 64
Qt 多线程采用继承QObject方式编写
你需要创建一个 `VariableManager` 类的实例,将 `inventory_1` 作为一个成员变量,并将其初始化为 114。然后,你需要创建一个 `AccessManager` 类的实例,并将它连接到 `VariableManager` 的信号和槽上。在 `on_spinBox_valueChanged` 函数中,你需要通过 `AccessManager` 实例来获取和更新 `inventory_1` 的值,并将其显示在 `label_3` 标签上。
修改后的代码如下:
```c++
// 管理变量的类
class VariableManager : public QObject
{
Q_OBJECT
public:
VariableManager(int initialValue, QObject *parent = nullptr) : QObject(parent), m_value(initialValue) {}
// 获取变量的函数
int getValue() const { return m_value; }
// 设置变量的函数
void setValue(int value)
{
m_value = value;
emit valueChanged(m_value); // 发射信号
}
signals:
// 变量被更新时发射的信号
void valueChanged(int newValue);
private:
int m_value;
};
// 多个人访问变量的类
class AccessManager : public QObject
{
Q_OBJECT
public:
AccessManager(VariableManager *variable, QObject *parent = nullptr) : QObject(parent), m_variable(variable)
{
// 连接变量更新信号,以便在变量更新时立即获取最新的值
connect(m_variable, &VariableManager::valueChanged, this, &AccessManager::onValueChanged);
}
public slots:
// 获取变量的槽函数
int getValue() const { return m_variable->getValue(); }
// 设置变量的槽函数
void setValue(int value) { m_variable->setValue(value); }
private slots:
// 当变量被更新时被调用的槽函数
void onValueChanged(int newValue)
{
// 在这里可以做一些处理,例如打印日志等
}
private:
VariableManager *m_variable;
};
// 在 menu 类中创建 VariableManager 实例和 AccessManager 实例
class menu : public QMainWindow
{
Q_OBJECT
public:
menu(QWidget *parent = Q_NULLPTR) : QMainWindow(parent)
{
// 创建 VariableManager 实例,并将其初始值设置为 114
m_inventoryManager = new VariableManager(114, this);
// 创建 AccessManager 实例,并将其连接到 VariableManager 的信号和槽上
m_inventoryAccess = new AccessManager(m_inventoryManager, this);
}
private slots:
void on_spinBox_valueChanged(int value)
{
// 通过 AccessManager 实例来获取和更新 inventory_1 的值
int inventory_1 = m_inventoryAccess->getValue();
inventory_1 -= value;
m_inventoryAccess->setValue(inventory_1);
// 将 inventory_1 的值显示在 label_3 标签上
ui->label_3->setText("库存:" + QString::number(inventory_1));
if (ui->spinBox->value() >= 114)
{
QMessageBox::warning(this, "嘿", "你居然全要了!");
}
}
private:
VariableManager *m_inventoryManager;
AccessManager *m_inventoryAccess;
};
```
阅读全文