您可以使用 Qt 的信号槽机制来实现检测页面中所有编辑框(如 QLineEdit)和组合框(如 QComboBox)是否有变更。以下是一种可能的实现方式:

首先,您可以在页面类中定义一个私有属性(私有变量),用于保存页面中所有编辑框和组合框的当前值。例如:

class MyPage : public QWidget {
    Q_OBJECT
public:
    explicit MyPage(QWidget *parent = nullptr);

private:
    QLineEdit *edit1;
    QLineEdit *edit2;
    QComboBox *combo1;
    QComboBox *combo2;

    // 保存编辑框和组合框的当前值
    QString oldEdit1Value;
    QString oldEdit2Value;
    int oldCombo1Index;
    int oldCombo2Index;

private slots:
    // 编辑框值变更时的槽函数
    void onEditValueChanged(const QString &newValue);

    // 组合框选项变更时的槽函数
    void onComboIndexChanged(int newIndex);
};

接下来,在构造函数中,您可以连接每个编辑框和组合框的值变更信号(如 textChanged()currentIndexChanged())到相应的槽函数,以便在变更时进行处理。同时,您可以在构造函数中初始化旧值属性:

MyPage::MyPage(QWidget *parent) : QWidget(parent)
{
    // 创建和设置编辑框和组合框...

    // 连接编辑框的值变更信号到槽函数
    connect(edit1, &QLineEdit::textChanged, this, &MyPage::onEditValueChanged);
    connect(edit2, &QLineEdit::textChanged, this, &MyPage::onEditValueChanged);

    // 连接组合框的选项变更信号到槽函数
    connect(combo1, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &MyPage::onComboIndexChanged);
    connect(combo2, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &MyPage::onComboIndexChanged);

    // 初始化旧值属性
    oldEdit1Value = edit1->text();
    oldEdit2Value = edit2->text();
    oldCombo1Index = combo1->currentIndex();
    oldCombo2Index = combo2->currentIndex();
}

最后,您可以在槽函数中比较新旧值,并根据需要执行逻辑。例如,您可以在 onEditValueChanged() 槽函数中比较新旧编辑框的值:

void MyPage::onEditValueChanged(const QString &newValue)
{
    QLineEdit *senderEdit = qobject_cast<QLineEdit*>(sender()); // 获取发送信号的编辑框
    if (senderEdit) {
        QString oldValue;
        if (senderEdit == edit1) {
            oldValue = oldEdit1Value;
        } else if (senderEdit == edit2) {
            oldValue = oldEdit2Value;
        }

        // 比较新旧值并执行逻辑
        if (newValue != oldValue) {
            // 值已变更
            // TODO: 执行您的逻辑

            // 更新旧值
            if (senderEdit == edit1) {
                oldEdit1Value = newValue;
            } else if (senderEdit == edit2) {
                oldEdit1Value = newValue;
            }
        }
    }
}

类似地,您可以在 onComboIndexChanged() 槽函数中比较新旧组合框的选项索引,并执行相应的逻辑。

通过这种方式,您可以实现检测和处理页面中所有编辑框和组合框的变更。请注意,以上示例代码仅为演示目的,实际应用中您可能需要根据具体需求进行适当修改。

Qt 使用 property() 方法检测页面所有编辑框和组合框变更

原文地址: https://www.cveoy.top/t/topic/qu4U 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录