qt - QT:试图引用已删除的函数
问题描述
我知道这个问题已经被问过很多次(例如那里和那里),但不幸的是,这些解决方案不适用于我的情况。
背景
错误信息:'ADACEL::SPEECH::SRA::StatusRow::StatusRow(const ADACEL::SPEECH::SRA::StatusRow &)': attempting to reference a deleted function
从我的阅读中,我了解到问题可能来自 QObject 的复制构造函数,但我不知道如何解决这个问题!
所以,看看我的课 :
namespace ADACEL
{
namespace SPEECH
{
namespace SRA
{
class StatusRow: public QObject
{
Q_OBJECT
Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
Q_PROPERTY(QString icon READ icon WRITE setIcon NOTIFY iconChanged)
public:
StatusRow(QObject *parent = 0);
StatusRow(const QString &name, const QString &color, QObject *parent = 0);
//StatusRow(const StatusRow&) = delete;
~StatusRow(void) {};
QString name() const;
void setName(const QString &name);
QString icon() const;
void setIcon(const QString &icon);
//StatusRow& operator=(const StatusRow&) = delete;
Q_SIGNALS:
void nameChanged();
void iconChanged();
private:
QString m_name;
QString m_icon;
};
}
}
}
Q_DECLARE_METATYPE(ADACEL::SPEECH::SRA::StatusRow)
我的类的实例化:
StatusWindow::StatusWindow(GUIDataLayer* pUiDataLayer) : QDeclarativeView(0),
m_statusRows(0)
{
setWindowModality(Qt::ApplicationModal);
m_statusRows = new QList<StatusRow*>();
m_statusRows->append(new StatusRow(TITLE_AUDIO_PROVIDER, ICON_OK));
m_statusRows->append(new StatusRow(TITLE_ADAPTER, ICON_ERROR));
rootContext()->setContextProperty("statusInfo", QVariant::fromValue(m_statusRows));
rootContext()->setContextProperty("uiDataLayer", pUiDataLayer);
...
}
到目前为止我尝试了什么
我已经尝试过了,Q_DECLARE_METATYPE(ADACEL::SPEECH::SRA::StatusRow*)
但是我遇到了错误Type is not registered, please use the Q_DECLARE_METATYPE macro to make it known to Qt's meta-object system
此外,Q_DECLARE_METATYPE
仅当我使用指向 QVariant 的指针时才需要。以下是编译没有任何问题:
QList<StatusRow*> statusRows;
statusRows.append(new StatusRow(TITLE_AUDIO_PROVIDER, ICON_OK));
statusRows.append(new StatusRow(TITLE_ASR_ENGINE, ICON_NONE));
statusRows.append(new StatusRow(TITLE_POST_PROCESSOR, ICON_NONE));
statusRows.append(new StatusRow(TITLE_ADAPTER, ICON_ERROR));
rootContext()->setContextProperty("statusInfo", QVariant::fromValue(statusRows));
解决方案
我没有观察到您指出的错误,我也更喜欢使用QVariantList
而不是QList <T* >
导出列表QObjects
:
主文件
using namespace ADACEL::SPEECH::SRA;
QVariantList statusRows;
statusRows.append(QVariant::fromValue(new StatusRow("TITLE_AUDIO_PROVIDER", "ICON_OK")));
statusRows.append(QVariant::fromValue(new StatusRow("TITLE_ASR_ENGINE", "ICON_NONE")));
statusRows.append(QVariant::fromValue(new StatusRow("TITLE_POST_PROCESSOR", "ICON_NONE")));
statusRows.append(QVariant::fromValue(new StatusRow("TITLE_ADAPTER", "ICON_ERROR")));
QQuickView view;
view.rootContext()->setContextProperty("statusInfo", QVariant::fromValue(statusRows));
推荐阅读
- python - 如何编写断言语句来测试 ValueError
- python - 我正在尝试查找位图图像的高度和宽度,我环顾了网络,但没有找到任何答案
- android - 如何使 Mapbox Marker 可点击并获取其属性?
- javascript - 如何从列表中创建对象
- laravel - Laravel Auth::User() 性能
- python - Selenium 在终端中有效,但在 Python Shell 中无效
- java - 依赖注入到嵌入式码头上的 websocket 端点
- jmeter - 如果我使用 ${status} == true 时控制器不工作
- flutter - 得到 NoSuchMethodError (NoSuchMethodError: The method 'call' was called on null. 在颤振中 setState 后出错
- javascript - 循环依赖错误阻止 Angular 编译