从C文件调用CPP函数不需要';我不能正常工作 我有一个用C和C++编写的QT应用程序。我试图从C文件调用CPP函数。当我试图从UI用qpushbutton调用回调函数时,它可以工作,但当我试图在main中调用回调函数时,它不能正常工作。根据以下代码,问题是什么?Thx
mainwindow.cpp从C文件调用CPP函数不需要';我不能正常工作 我有一个用C和C++编写的QT应用程序。我试图从C文件调用CPP函数。当我试图从UI用qpushbutton调用回调函数时,它可以工作,但当我试图在main中调用回调函数时,它不能正常工作。根据以下代码,问题是什么?Thx,c++,c,qt,callback,C++,C,Qt,Callback,mainwindow.cpp void MainWindow::on_pushButton_clicked() { QUrl url; url.setScheme("ftp"); url.setHost("192.168.1.2"); url.setUserName("ftpadmin"); url.setPassword("password"); url.setPath(&
void MainWindow::on_pushButton_clicked()
{
QUrl url;
url.setScheme("ftp");
url.setHost("192.168.1.2");
url.setUserName("ftpadmin");
url.setPassword("password");
url.setPath("");
FtpUploadManager *mFtpManager = new FtpUploadManager(url);
mFtpManager->addFile("/home/user/Desktop/a.txt");
}
fileanalyzer.cpp
static inline void notify_ftp_manager(void *user,char* FileName)
{
FileAnalyzer* _this = (FileAnalyzer*)(user);
QString abc = QString(FileName);
_this->m_FtpManager->addFile(abc);
}
FileAnalyzer::FileAnalyzer(QString path, QString prefix)
{
QUrl url;
url.setScheme("ftp");
url.setHost("192.168.1.2");
url.setUserName("ftpadmin");
url.setPassword("password");
url.setPath("");
m_FtpManager = new FtpUploadManager(url, this);
set_ftp_callback_function(notify_ftp_manager, this);
}
fileanalyzer.h
class FileAnalyzer: public QObject
{
Q_OBJECT
public:
FtpUploadManager *m_FtpManager ;
}
callbackfunction.c
CALLBACKFUNCTION ftp_callback;
void *ftp_callback_user;
void callbackfunction()
{
if(ftp_callback != NULL && ftp_callback_user != NULL)
{
ftp_callback(ftp_callback_user,"a.txt");
}
}
void set_ftp_callback_function(CALLBACKFUNCTION callbackfnc, void* ftp_callback_caller_user)
{
ftp_callback = callbackfnc;
ftp_callback_user = ftp_callback_caller_user;
}
int main()
{
callbackfunction();
}
callbackfunction.h
typedef void (*CALLBACKFUNCTION)(void *user,char* fileName);
void set_ftp_callback_function(CALLBACKFUNCTION callbackfnc, void* ftp_callback_caller_user);
我认为代码不起作用是因为我为回调函数编写了静态方法。当我将静态函数更改为类函数时,它工作了!但我仍然不知道为什么静态方法不起作用。这两个程序是分开的吗?在哪里创建了
main窗口
对象?我在main()
中没有看到它。在调用callbackfunction()
之前,必须先单击按钮,在程序启动时,首先调用该按钮。旁注:为了安全起见,在声明ftp\u callback
和ftp\u callback\u user
时,应该将它们设置为nullptr