【发布时间】:2021-04-05 02:18:46
【问题描述】:
我有一个从QUndoCommand继承的命令:
class ImportEntityCommand : public QUndoCommand
{
// ...
private:
QString m_importedEntityName;
Importer *m_importer;
// ...
}
redo 方法启动 QProcess:
void ImportEntityCommand::redo()
{
if (/* Import is already done before */) {
// ...
} else {
// Import finish is handled by a slot
m_importer->import(m_url);
}
}
信号槽连接由命令构造器组成:
ImportEntityCommand::ImportEntityCommand(EditorSceneItemModel *sceneModel, const QUrl &url) :
, m_importer(new Importer(/* ... */))
{
// Importer would start a QProcess which runs asynchronously and emits a signal
// that's why I have to handle the signal by a slot
QObject::connect(m_importer
, &Importer::importFinished
, this
, &ImportEntityCommand::handleImportFinish
);
}
进程发出的信号是这样处理的:
void ImportEntityCommand::handleImportFinish(const QString name)
{
m_importedEntityName = name;
}
但是我在编译时收到这样的错误:
C:\Qt\Qt5.12.9\5.12.9\msvc2017_64\include\QtCore\qobject.h:250: 错误:C2664: 'QMetaObject::Connection QObject::connectImpl(const QObject *,void **, const QObject *,void **,QtPrivate::QSlotObjectBase *,Qt::ConnectionType,const int *,const QMetaObject *)':无法将参数 3 从 'const ImportEntityCommand *' 转换为 'const QObject *'
错误点在于:
无法将参数 3 从 'const ImportEntityCommand *' 转换为 'const QObject *'
我从QUndoCommand 继承我的ImportEntityCommand 类我猜它又从QObject 继承。
问题
因此,出于某种原因,Qt 不允许我处理从QUndoCommand 继承的命令中的信号。
- 这个限制是故意的吗?
- 我有哪些选项可以解决此限制?标准程序是什么?
【问题讨论】:
标签: c++ qt signals signals-slots qprocess