Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 抑制信号并稍后发射_Qt - Fatal编程技术网

Qt 抑制信号并稍后发射

Qt 抑制信号并稍后发射,qt,Qt,我得到了一个状态由用户通过QDialog控制的对象。对话框窗口中有许多QLineEdits、QRadioButtons和其他内容。我已经在对象中创建了插槽,并将其与来自小部件的信号连接起来。一切正常,只要我按下小部件,对象的状态就会改变。现在,我添加了ok和cancel按钮,我希望只有在单击ok按钮后才更改对象状态,而当我按下cancel按钮时不更改对象状态。那么,当点击ok按钮时,是否可以捕捉小部件的信号并发出它们,或者当点击cancel按钮时是否可以抑制它们。我使用的是Qt 5.2.1您不能

我得到了一个状态由用户通过
QDialog
控制的对象。对话框窗口中有许多
QLineEdit
s、
QRadioButton
s和其他内容。我已经在对象中创建了
插槽
,并将其与来自小部件的
信号连接起来。一切正常,只要我按下小部件,对象的状态就会改变。现在,我添加了
ok
cancel
按钮,我希望只有在单击
ok
按钮后才更改对象状态,而当我按下
cancel
按钮时不更改对象状态。那么,当点击
ok
按钮时,是否可以捕捉小部件的信号并发出它们,或者当点击
cancel
按钮时是否可以抑制它们。我使用的是
Qt 5.2.1

您不能轻松做到这一点。另外,我认为在信号水平上解决这个问题是错误的方法

您应该缓存这些值,并在“确定”(而不是“取消”)时将它们设置为对象;或者,您可以直接从小部件读取值,并以相同的方式将它们传递给对象,而无需缓存


是否正在构建设置对话框?

在窗口小部件(例如LineEdit或QRadiobutton)的插槽中,您必须存储临时状态。单击Ok按钮后,您可以将数据写入持久存储或类似的内容。“取消”按钮将丢弃所有临时数据。是的,这是一个包含多个绘图的设置对话框。当创建对话框时,它从绘图中读取参数,并用这些值构造小部件。我不想从所有小部件中读取值并将其应用于绘图,因为在这种情况下,所有绘图都将被重新绘制。我只想重新绘制参数已更改的绘图。然后将新值与绘图的当前值进行比较,并仅在更改时进行设置。如果可能的话,最好将该值更改检查构建到plot setter方法中。