Qt QList<T>类型转换和node_copy

3
我可以帮忙进行翻译。以下是您需要翻译的内容:

我遇到了一个错误,不知道该如何修复它。我正在为可用的SQL驱动程序(提供程序)做下拉列表选择器。

标题

#include "QObject"
#include "QString"
#include "QList"
#include "QPointer"

class TProvider;
typedef const TProvider * const TProviderPointer;

class TProvider
{
    public:
        QString name;
        QString driverName;

        TProvider(QString name, QString driverName);
        static const QList<TProviderPointer> getAvailableProviders();
        static TProviderPointer getProvider(int id);
};

TProviderPointer MySQLProvider = new TProvider("MySQL", "QMYSQL");
TProviderPointer IBProvider = new TProvider("Interbase", "QIBASE");

在CPP中,我创建了两个指向const Providers的const指针(TProviderPointer)(枚举可用驱动程序)。我还有一个方法,它返回const QList。

#include "tprovider.h"

TProvider::TProvider(QString name, QString driverName):
    name(name), driverName(driverName)
{
}

const QList<TProviderPointer> TProvider::getAvailableProviders()
{
    QList<TProviderPointer> list;
    list.append(MySQLProvider);
    list.append(IBProvider);

    return list;
}

TProviderPointer getProvider(int id)
{
    switch(id){
        case 0:
            return MySQLProvider;
        case 1:
            return IBProvider;
    }
}

当我使用这个时。
const QList<TProviderPointer> list = TProvider::getAvailableProviders();
foreach (TProviderPointer provider, list) {
    ui->eprovider->addItem(provider->name);
}

我在qlist.h的const QList<TProviderPointer> list = TProvider::getAvailableProviders();这一行遇到了错误,提示为C2440 TProviderPointer *转换为void *

Q_INLINE_TEMPLATE void QList<T>::node_copy(Node *from, Node *to, Node *src)

我在使用中是否有任何复制操作?我该如何解决这个问题呢? 谢谢。

1个回答

1
我认为问题出在你的typedef上。const TProvider * const是指向const TProvider的指针,但在你的代码中,你正在运行时创建TProvider的新实例。此外,您可以在Qt文档中阅读到QList的值类型必须是可分配数据类型。因此,你应该有一个指向TProvider的指针,你的typedef应该像这样:
typedef const TProvider * TProviderPointer;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接