我在qt designer中创建了两个具有相同名称对象的窗口(Win1
,Win2
)。 我只想创建和操作依赖于输入数据的一个(use_1
)。
我可以这样做:
if ( use_1 )
ui_win1->setupUi();
else
ui_win2->setupUi();
// (...)
if ( use_1 )
ui_win1->comboBox->clear();
else
ui_win2->comboBox->clear();
以及我将要使用的所有常用方法。
有没有更聪明的方法去做那件事?
我正在阅读有关std::variant
和qvariant
的内容,但似乎这不是我要找的内容。
为什么不干脆
WhatewerBaseWindowType *activeWindow;
if ( use_1 )
activeWindow = ui_win1;
else
activeWindow = ui_win2;
activeWindow->setupUi();
activeWindow->comboBox->clear();
// ...
我假设它们有某种基类,否则为什么它们有所有的通用方法
如何包装这两者并定义方法来处理它。。。
实际上,这就像是在包装类中移动所有的逻辑。
class Wrapper
{
...
}
还有一些方法,比如
void wrapper::clear(bool use)
{
if( use_1 )
ui_win1.clear();
else
ui_win2.clear();
}
最后你只需要打个电话
myWrapper.clear(use_1);
myWrapper.init(use_1);
等等等等
选项2:不使用包装器,而是编写一个函数,该函数返回对要控制的窗口的引用,并使用该值触发该窗口
如:
QWidget& MainWindow::getWin(bool x)
{
if(x)
{
return ui_win1;
}
else
{
return ui_win2;
}
}
在代码中你做的
this->getWin(use_1).clear();
this->getWin(use_1).setupUi();
等等等等