提问者:小点点

用相同的方法对不同的类使用一个变量


我在qt designer中创建了两个具有相同名称对象的窗口(Win1Win2)。 我只想创建和操作依赖于输入数据的一个(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::variantqvariant的内容,但似乎这不是我要找的内容。


共2个答案

匿名用户

为什么不干脆

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();

等等等等

相关问题