Qt 使用 property() 方法检测页面所有编辑框和组合框变更
您可以使用 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() 槽函数中比较新旧组合框的选项索引,并执行相应的逻辑。
通过这种方式,您可以实现检测和处理页面中所有编辑框和组合框的变更。请注意,以上示例代码仅为演示目的,实际应用中您可能需要根据具体需求进行适当修改。
原文地址: https://www.cveoy.top/t/topic/qu4U 著作权归作者所有。请勿转载和采集!