|
本帖最后由 紫雪封尘 于 2019-9-2 14:59 编辑
我用qt调用Fortran程序后,点击运行按钮,在程序运行时会出现界面无响应问题,在网上搜索需要多线程,可我的函数需要调用Fortran的dll,所以不是很懂怎么样把调用dll的函数放到子线程中去,请各位老师指教,不胜感激。 附qt程序如下:
void imput::on_pBrun_clicked()//如果点击运行按钮那么运行此函数
{ //调用 dll****************************************************************
typedef void(*QTSEG)(char*filesey,char* fileobs,char*filesx,char*filesy,char*filerx,char*filery,char*filetrace,int*ntrace,short int *nt,short int*dt,int,int,int,int,int,int,int);
QLibrary dll("Dllsey_information.dll");//加载Dllsey_information.dll
if(dll.load())
{
QString filesey,filesx,filesy,filerx,filery,fileobs,filetrace;
filesey=ui->LEsegy->text();
fileobs=ui->lineEditobs->text();
filesx=ui->lineEditsx->text();
filesy=ui->lineEditsy->text();
filerx=ui->lineEditrx->text();
filery=ui->lineEditry->text();
filetrace=ui->lineEdit_trace->text(); //用in来表示Fortran的dll中的函数
QTSEG in=(QTSEG)dll.resolve("SEG");
short int nt;
short int dt;
int ntrace;
ntrace=ui->lineEdit_ntrace->text().toInt();
nt=ui->lineEdit_nt->text().toShort();
dt=ui->lineEdit_dt->text().toShort();
QByteArray fsey= filesey.toLocal8Bit();
QByteArray fobs= fileobs.toLocal8Bit();
QByteArray fsx= filesx.toLocal8Bit();
QByteArray fsy= filesy.toLocal8Bit();
QByteArray frx= filerx.toLocal8Bit();
QByteArray fry= filery.toLocal8Bit();
QByteArray fntrace= filetrace.toLocal8Bit(); //调用Fortran的dll即in
in(fsey.data(),fsx.data(),fsy.data(),frx.data(),fry.data(),fobs.data(),fntrace.data(),&ntrace,&nt,&dt,fsey.size(),fsx.size(),fsy.size(),frx.size(),fry.size(),fobs.size(),fntrace.size());
QMessageBox::about(this,"Err","程序已完成!");
}
|
|