我正在使用Qt框架为我的业务逻辑创建ui。
负责构建ui的类提供了几种方法,这些方法可以逐步地初始化ui元素,对其进行布局,对其进行分组,最后对它们进行格式化(即void MyUi::init3_formatUiElements()
)。
自然,某些ui元素需要设置大量的布局设置,因此此方法可能看起来像
void MyUi::init3_formatUiElements() {
_spinBox_distance->setMinimum(0.0);
_spinBox_distance->setMaximum(10.0);
_spinBox_distance->setSingleStep(0.5);
_spinBox_distance->setSuffix(" meters");
//...
//same for other widgets
return;
}
QDoubleSpinBox* _spinBox_distance
之类的对象是MyUi
类的成员字段。
我想为_spinBox_distance
提供一个“临时别名”,因为上述方法主体简化为
void MyUi::init3_formatUiElements() {
//create alias x for _spinBox_distance here
x->setMinimum(0.0);
x->setMaximum(10.0);
x->setSingleStep(0.5);
x->setSuffix(" meters");
//...
//free alias x here
//same for other widgets: create alias x for next widget
//...
//free alias x here
return;
}
这将加快键入过程,并使代码片段更易于复制/粘贴,尤其是对于类似类型的ui元素。
除了在大括号中为每个块定义范围
{ QDoubleSpinBox*& x = _spinBox_distance;
x->setMinimum(0.0);
//...
}
{ QLabel*& x = _label_someOtherWidget;
//...
}
是否有一种优雅的方法来实现这一目标?
我尝试了上述语法而没有进行范围界定,但是破坏x
无疑会导致底层小部件的破坏。
也许
QDoubleSpinBox** x = new QDoubleSpinBox*;
x = &_spinBox_distance;
(*x)->setMinimum(0.0);
//...
delete x;
但是,这并不会使类型更加容易(多了三行,指向指针的指针,(*x)
)...:D
编辑:此命令不能像delete x
之后使用,无法重新声明为另一种类型。
答案 0 :(得分:0)
使用宏怎么样?
<form method="post" action="">
<select id="select-box" name="amt_per">
<option class="amt-button" value="1">1</option>
<option class="amt-button" value="2">2</option>
<option class="amt-button" value="3">3</option>
<option class="amt-button" value="4">4</option>
</select>
</form>
和
#define Set(argument) _spinBox_distance->set##argument
或
Set(Minimum(0.0));
Set(Maximum(10.0));
Set(SingleStep(0.5));
Set(Suffix(" meters"));
答案 1 :(得分:0)
从评论部分收集有关问题的基本概念性思想,我可以发布该问题的句法/技术答案。毫无疑问,不应在任何类型的“复杂”情况下(或者根本不要)选择这种方法。
{ auto x = _spinBox_distance;
x->setMinimum(0.0);
//...
}
{ auto x = _label_someOtherWidget;
//...
}
可以解决问题。
答案 2 :(得分:0)
我认为您的代码看起来不错,我发现使代码易于阅读/理解比使代码易于编写更为有用。请记住,您只需编写一次代码,然后便必须多次阅读。
在这种情况下,我可以更轻松地复制和粘贴旧的(常常被指责为错误)的文字。抓住_spinBox_distance->set
,然后粘贴,完成线条,粘贴,完成线条等...
但是,如果您发现自己一次又一次地写那4个setter,则将它们放到带有4个参数的1个函数中。
void SetParameters(QDoubleSpinBox* spinBox_distance, double min, double max, double step, std::string suffix)
{
//the setters
}