但是在Qt的menu.cpp文件里,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; };里的ui被警告为“未标示的变量”,QMessageBox::warning也被警告为“没有匹配的名为warning的值”
时间: 2024-01-29 11:02:28 浏览: 128
这是因为在menu.cpp文件中,变量ui和QMessageBox都不是该类的成员变量或成员函数,它们无法直接访问。正确的做法是将ui和QMessageBox作为参数传递给该类的构造函数,然后在构造函数中进行初始化。例如:
```cpp
class InventoryAccessManager : public QObject
{
Q_OBJECT
public:
InventoryAccessManager(InventoryManager* inventory, QWidget* parent = nullptr, QLabel* label = nullptr)
: QObject(parent), m_inventory(inventory), ui(label)
{
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->setText(QString("库存: %1").arg(newValue));
if (newValue <= 0)
{
QMessageBox::warning(nullptr, tr("Out of Stock"), tr("库存不足,请及时补货!"));
}
}
private:
InventoryManager* m_inventory;
QLabel* ui;
};
```
在构造函数中,我们将label作为参数传递给ui,并在onValueChanged槽函数中使用它更新文本。对于QMessageBox,我们可以直接使用类名QMessageBox,然后在警告框的标题和正文中使用tr()函数进行本地化处理。
阅读全文