QT中使用QFileDialog打开的目录文件很多的时候(如超过10,000)就会很慢,而且在UNIX上经常会Core dump.
费了好多劲,也没有办法解决.于是我就想用Motif来编写一个对话框来解决这个问题.但我又遇到了新的问题,就是当
把文件的名字得到后,我想关掉Motif做的对话框,却怎么都关不掉,如果不理这个关不掉的对话框的话,程序一切都正常.
但总有个对话框在上面很别扭.我的程序如下,请高手指教:
toplevel = XtVaOpenApplication(&app,"Motif dialog",NULL,0,&argc,argv,NULL,sessionShellWidgetClass,NULL);
XtSetArg(args[0],XmNpathMode,XmPATH_MODE_RELATIVE);
XtSetArg(args[1], XmNallowShellResize, TRUE);
EndApp=0;
dialog=XmCreateFileSelectionDialog(toplevel,"Files Open",args,2);
XtAddCallback(dialog,XmNokCallback,echo_file,NULL);
XtManageChild(dialog);
XtAppMainLoop(app);
void XtAppMainLoop(XtAppContext app_context)
{
XEvent *event;
while(EndApp==0)
{
XtAppNextEvent(app_context,event);
XtDispatchEvent(event);
if(XtIsManaged(dialog)==0)
EndApp=1;
}
puts("End App!");
}
void echo_file(Widget widget,XtPointer client_data,XtPointer call_data)
{
char *fn;
XmFileSelectionBoxCallbackStruct *cbs = (XmFileSelectionBoxCallbackStruct*)call_data;
fn=(char*)XmStringUnparse(cbs->value,
XmFONTLIST_DEFAULT_TAG,
XmCHARSET_TEXT,
XmCHARSET_TEXT,
NULL,0,XmOUTPUT_ALL);
if(!fn)
{
g_filename=QString("");
return;
}
if(!*fn)
{
g_filename=QString("");
puts("No file selected");
XtFree(fn);
return;
}
g_filename=QString(fn);
qWarning("Motif Select File name is %s",fn);
XtFree(fn);
XtUnmanageChild(dialog);
XtDestroyWidget(dialog);
XtDestroyWidget(toplevel);
}