C++ 使用Qt GUI调整/观察算法参数的最佳方法
我有两个算法类,它们进行不同的计算。所有这些类都有不同的参数集。我想要实现的是创建一个QtGUI,它充当算法参数的观察者,让我们使用它进行更改(参数的某种MVC)。可以为每个算法类手动创建所需的小部件(例如使用Qt Designer)。另一个要求是保持alorithms Qt空闲,尽管它们有自己的信号/插槽机制 目前,只要值发生变化,算法就会触发一个信号,第三方会将其转换为Qt信号,然后UI会相应地更新。每当UI小部件更改插槽时,都会在算法中设置适当的参数(在执行范围检查、转换等操作时)。目前,属于某个算法类的所有小部件都调用一个统一的插槽,该插槽检查属于该类的所有小部件(以减少所需的插槽数量) 非常基本的例子: GUI类C++ 使用Qt GUI调整/观察算法参数的最佳方法,c++,algorithm,qt,user-interface,C++,Algorithm,Qt,User Interface,我有两个算法类,它们进行不同的计算。所有这些类都有不同的参数集。我想要实现的是创建一个QtGUI,它充当算法参数的观察者,让我们使用它进行更改(参数的某种MVC)。可以为每个算法类手动创建所需的小部件(例如使用Qt Designer)。另一个要求是保持alorithms Qt空闲,尽管它们有自己的信号/插槽机制 目前,只要值发生变化,算法就会触发一个信号,第三方会将其转换为Qt信号,然后UI会相应地更新。每当UI小部件更改插槽时,都会在算法中设置适当的参数(在执行范围检查、转换等操作时)。目前,
connect( m_notifier, SIGNAL( algo1ChangedParameters() ), this, SLOT( updateWidgets ) );
connect( m_my_spinbox_1, SIGNAL( valueChanged(int) ), this, SLOT( handleAlgo1ParameterChange() ) );
connect( m_my_spinbox_2, SIGNAL( valueChanged(int) ), this, SLOT( handleAlgo1ParameterChange() ) );
void handleAlgo1ParameterChange()
{
Algo1Parameters p = m_algo1.GetParameters();
p.param1 = /*spinbox 1 value*/;
p.param2 = /*spinbox 1 value*/;
m_algo1.SetParameters( p );
}
void updateWidgets()
{
Algo1Parameters p = m_algo1.GetParameters();
/* set spinboxes to values in p */
}
在这种情况下,m_通知程序将在算法和Qt信号之间进行转换
我的问题:
- 是否有更好的/标准的方法来实现这种算法GUI(例如,使用某种Qt小部件值映射或类似方法进行范围检查和转换)
- 如果GUI是自动创建的,是否有通过访问者模式实现GUI创建的标准方法
谢谢 您可以使用Qt模型视图框架执行此任务。您可以创建新的模型类并实现其虚拟方法和信号(包括
data()
和setData()
方法和dataChanged
信号)。您可以使用QDataWidgetMapper
将自旋框附加到模型。Spinbox将自动反映模型数据更改。用户所做的更改将自动重定向到模型的setData
功能。在模型实现中,您可以实现所有必要的数据处理逻辑(包括范围检查)
但是,这种方法很容易导致过度复杂,所以请小心使用。一些简单的显式代码提供了一个基本示例