假设我有一个QSpinBox,如何从用户或其他函数手动更改值?
编辑:我只想在用户更改值时执行某些操作,但如果您的程序执行此操作(setValue),我不想执行此操作.
Che*_*byl 12
可能的方法:
ui->spinBox->blockSignals(true);
ui->spinBox->setValue(50);
ui->spinBox->blockSignals(false);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,信号不会被发出,所以你可以通过valueChanged()信号捕获的只是用户的动作.
例如:
void MainWindow::on_spinBox_valueChanged(int arg1)
{
qDebug() << "called";
}
Run Code Online (Sandbox Code Playgroud)
当用户通过鼠标更改值或键盘键入时,您会看到"called",但是当您setValue使用阻塞信号时,您看不到"called".
另一种方法是提供一些bool变量并将其设置为true之前setValue并在槽中检查此变量.如果是假(用户操作) - 执行某些操作,如果不是 - 请不要执行操作(将bool更改为false).优点:你不会阻挡信号.缺点:可能是硬读代码,如果插槽调用很多次,你会多次进行不必要的检查.
| 归档时间: |
|
| 查看次数: |
1776 次 |
| 最近记录: |