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);
}
}
我在另一个class中实例化了一个使用这个函数的class对象。在那里我尝试这样使用它:
QDoubleSpinBox x;
object_of_my_class->activateElements(correctWidget, x);
此时我卡住了,因为我收到以下错误:
error: ‘QDoubleSpinBox::QDoubleSpinBox(const QDoubleSpinBox&)’ is private
Q_DISABLE_COPY(QDoubleSpinBox)
我将如何处理这个问题,QDoubleSpinBox 和其他人是私有的?我是在错误地构建函数,还是在错误地使用它?有什么办法吗?
看起来您根本不需要类型的对象,只需要类型本身。在这种情况下,指定模板参数是可行的方法:
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);
我正在尝试构建一个将 (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);
}
}
我在另一个class中实例化了一个使用这个函数的class对象。在那里我尝试这样使用它:
QDoubleSpinBox x;
object_of_my_class->activateElements(correctWidget, x);
此时我卡住了,因为我收到以下错误:
error: ‘QDoubleSpinBox::QDoubleSpinBox(const QDoubleSpinBox&)’ is private
Q_DISABLE_COPY(QDoubleSpinBox)
我将如何处理这个问题,QDoubleSpinBox 和其他人是私有的?我是在错误地构建函数,还是在错误地使用它?有什么办法吗?
看起来您根本不需要类型的对象,只需要类型本身。在这种情况下,指定模板参数是可行的方法:
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);