【问题标题】:How to call changeValue of QSpinBox only when user changed value仅当用户更改值时如何调用 QSpinBox 的 changeValue
【发布时间】:2020-11-21 15:41:57
【问题描述】:

这是我的QSpinBox插槽方法:

void MainWindow::on_sbObjectSize_valueChanged(int arg1)
{
     /*do something*/;
}

我需要区分用户何时更改此值(通过键入值或单击箭头)以及何时从代码更改此值(例如使用ui->sbObjectSize->setValue(1))。
是否可以通过重载某些东西、制作自己的插槽/信号或任何其他方式来做到这一点?

【问题讨论】:

    标签: c++ slot qtwidgets qspinbox


    【解决方案1】:

    是的,您可以通过检查从sender() 返回的值来做到这一点。假设您在主窗口的 UI 中有一个按钮,单击该按钮会更改旋转框的值,那么sender() 的值将是按钮指针的地址。 qDebug() 非常好,因为它会通过可用的元数据输出QObject 中可用的其他信息。例如,您可以为您的QObject 命名,然后qDebug() 将输出该名称。

    这是一个代码sn-p:

    ui->pushButton->setObjectName("Button1");
    connect(ui->pushButton, &QPushButton::clicked, [this] {
        ui->sbObjectSize->setValue(ui->sbObjectSize->value()+1);
    });
    
    connect(ui->sbObjectSize, QOverload<int>::of(&QSpinBox::valueChanged), [=] (int value) {
        //based on what this prints, you can write your code so that you can check
        qDebug()  << sender();
        if (sender() == nullptr) {
            qDebug() << "Value changed by via the spin box itself";
        } else {
            qDebug() << "Value changed by: " << sender();
        }
    });
    

    【讨论】:

    猜你喜欢
    • 2019-05-15
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 2014-12-09
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多