c++ - Qt 类型作为函数的参数

标签 c++ qt templates types qt4

我正在尝试构建一个将 (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);

此时我卡住了,因为我收到以下错误:

错误:‘QDoubleSpinBox::QDoubleSpinBox(const QDoubleSpinBox&)’是私有(private)的 Q_DISABLE_COPY(QDoubleSpinBox)

我将如何处理这个问题,即 QDoubleSpinBox 和其他人是私有(private)的?我是在错误地构建函数,还是在错误地使用它?有没有办法做到这一点?

最佳答案

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

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

关于c++ - Qt 类型作为函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48023441/

相关文章:

c++ - 字符数组输出额外的字符

c++ - 错误 : C1083: Cannot open include file: 'QJson/Parser' : No such file or directory

c++ - std::mutex 和 std::atomic 的链接问题

c++ - 在有限的内存上对大矩阵进行矩阵运算

c++ - Qt 应用程序随机崩溃通过使用回调和从 std::thread 或 boost::thread 发出信号

python - 使用 python file_dialog() 从 Scientific Linux 访问 Windows 共享上的网络文件夹

qt - 如何在Qt中显示简单的html文件

c++ - 检索对象的函数运算符的参数类型

C++运行时类型切换(避免切换)

javascript - 未捕获的类型错误 : undefined is not a function Backbone Template