【发布时间】:2015-12-29 20:50:14
【问题描述】:
我需要将 StorageSCP 类中的 loadReceivedFiles() 信号链接到 MainController 中的 test() 插槽。
以下代码给了我 3 个错误:
connect(storageSCPWorker->getStorageSCP, &StorageSCP::loadReceivedFiles, this, &MainController::test);
错误 2 错误 C2248: 'QObject::QObject' : 无法访问私有成员 在类 'QObject' c:\users\310214192\documents\visual studio 中声明 2012\projects\Test\Test\storagescp.h 18 1 测试
错误 3 错误 C2248: 'SCP::SCP' : 无法访问私有成员 在类 'SCP' c:\users\310214192\documents\visual studio 中声明 2012\projects\Test\Test\storagescp.h 18 1 测试
错误 1 错误 C3867: 'StorageSCPWorker::getStorageSCP': 函数调用 缺少参数列表;使用“&StorageSCPWorker::getStorageSCP” 创建指向成员 C:\Users\310214192\Documents\Visual Studio 的指针 2012\Projects\Test\Test\maincontroller.cpp 10 1 测试
我怎样才能让它工作?
MainController.cpp:
MainController::MainController()
{
storageSCPWorkerThread = new QThread();
storageSCPWorker = new StorageSCPWorker(104, "AE_TEST", 16384, "C:/Test/Received/");
storageSCPWorker->moveToThread(storageSCPWorkerThread);
connect(storageSCPWorkerThread, &QThread::started, storageSCPWorker, &StorageSCPWorker::startSCP);
//connect(storageSCPWorker->getStorageSCP, &StorageSCP::loadReceivedFiles, this, &MainController::test);
storageSCPWorkerThread->start();
}
void MainController::test()
{
qDebug() << "HELLO MOTO!!!!";
}
MainController.h:
class MainController : public QObject
{
Q_OBJECT
public:
MainController();
~MainController();
public slots:
void test();
private:
QThread* storageSCPWorkerThread;
StorageSCPWorker* storageSCPWorker;
};
StorageSCPWorker.cpp:
StorageSCP StorageSCPWorker::getStorageSCP()
{
return storageSCP;
}
StorageSCPWorker.h:
class StorageSCPWorker : public QObject
{
Q_OBJECT
public:
StorageSCPWorker(int port, const OFString &aeTitle, int maxPduLength, const OFString &outputDirectory);
~StorageSCPWorker();
StorageSCP getStorageSCP();
public slots:
void startSCP();
private:
int port;
OFString aeTitle;
int maxPduLength;
OFString outputDirectory;
StorageSCP storageSCP;
OFCondition status;
};
StorageSCP.cpp:
void StorageSCP::notifyInstanceStored()
{
emit loadReceivedFiles();
}
StorageSCP.h:
signals:
void loadReceivedFiles();
【问题讨论】:
-
StorageSCP getStorageSCP();您返回成员的副本。这很可能不是您想要的行为。返回 (const) 引用。
标签: c++ qt signals-slots