繁体   English   中英

Qt类型作为功能参数

[英]Qt Type as parameter of function

我正在尝试构建一个将(qt)类型作为参数并使用它来查找子项的函数。 我的函数如下所示:

template <typename QType>
void MyClass::activateElements(QWidget *widget, QType t)
{
    QList<QType *> buttons = widget->findChildren(t);
    foreach( QType *button, buttons )
    {
        buttons->setEnabled(true);
    }
}

我也尝试过

template <typename QType>
void MyClass::activateElements(QWidget *widget, QType)
{
    QList<QType *> buttons = (* widget).findChildren<QType *>();
    foreach( QType *button, buttons )
    {
        button->setEnabled(true);
    }
}

我实例化了在另一个类中使用此功能的类的对象。 在那里,我尝试像这样使用它:

    QDoubleSpinBox x;
    object_of_my_class->activateElements(correctWidget, x);

在这一点上,我被卡住了,因为出现以下错误:

error: 'QDoubleSpinBox::QDoubleSpinBox(const QDoubleSpinBox&)' is private Q_DISABLE_COPY(QDoubleSpinBox)

QDoubleSpinBox和其他人是私有的,我将如何处理这个问题? 我是否曾经尝试过错误地构建函数,还是我使用不正确? 有没有办法做到这一点?

看起来您根本不需要类型的对象,只需要类型本身。 在这种情况下,指定template参数将是解决方法:

template <typename QType>
void MyClass::activateElements(QWidget *widget)
{
    QList<QType *> buttons = (* widget).findChildren<QType *>();
    foreach( QType *button, buttons )
    {
        button->setEnabled(true);
    }
}

// Usage:
object_of_my_class->activateElements<QDoubleSpinBox>(correctWidget);

我会这样做,因为它很好地表达了意图。

但是,如果您确实要从现有对象启用类型推导,请通过引用传递它,以避免(禁止)复制:

template <typename QType>
void MyClass::activateElements(QWidget *widget, const QType &)
{
    QList<QType *> buttons = (* widget).findChildren<QType *>();
    foreach( QType *button, buttons )
    {
        button->setEnabled(true);
    }
}

// Usage:
QDoubleSpinBox x;
object_of_my_class->activateElements(correctWidget, x);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM