// 管理变量的类 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,这两份代码的位置分别在menu.h和menu.cpp里
时间: 2024-02-19 10:59:18 浏览: 56
C++ Qt创建多线程的2种方式:重写run函数,使用moveToThread【应该早点知道的】源码示例
您可以将VariableManager类修改为以下形式,以便管理inventory_1这个变量:
menu.h:
```c++
class InventoryManager : public QObject
{
Q_OBJECT
public:
InventoryManager(QObject *parent = nullptr) : QObject(parent) {}
int getValue() const { return m_inventory; }
void setValue(int value)
{
m_inventory = value;
emit valueChanged(m_inventory);
}
signals:
void valueChanged(int newValue);
private:
int m_inventory = 114;
};
```
然后在menu.cpp中,可以定义AccessManager类来管理inventory_1这个变量:
```c++
class InventoryAccessManager : public QObject
{
Q_OBJECT
public:
InventoryAccessManager(InventoryManager* inventory, QWidget* parent = nullptr)
: QObject(parent), m_inventory(inventory)
{
connect(m_inventory, &InventoryManager::valueChanged, this, &InventoryAccessManager::onValueChanged);
}
int getValue() const { return m_inventory->getValue(); }
void setValue(int value) { m_inventory->setValue(value); }
private slots:
void onValueChanged(int newValue)
{
// 在这里可以做一些处理,例如打印日志等
ui->label_3->setText(QString("库存: %1").arg(newValue));
if (newValue <= 0)
{
QMessageBox::warning(this, "Out of Stock", "库存不足,请及时补货!");
}
}
private:
InventoryManager* m_inventory;
};
// 在menu.cpp中的on_spinBox_valueChanged槽函数中使用
void menu::on_spinBox_valueChanged(int value)
{
static InventoryManager inventory;
static InventoryAccessManager inventoryAccessManager(&inventory, this);
int inventory_1 = inventoryAccessManager.getValue();
inventoryAccessManager.setValue(inventory_1 - value);
if (ui->spinBox->value() >= inventory_1)
{
QMessageBox::warning(this, "嘿", "你居然全要了!");
}
}
```
这样,您可以使用InventoryAccessManager类来管理inventory_1这个变量,而且在变量更新时还可以进行一些处理,例如显示库存信息、弹出消息框等。
阅读全文