• 3650阅读
  • 0回复

QT中使用Motif的问题 [复制链接]

上一主题 下一主题
离线fengniu9
 
只看楼主 正序阅读 楼主  发表于: 2008-06-10
— 本帖被 XChinux 执行加亮操作(2008-06-13) —
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);
}   
快速回复
限100 字节
 
上一个 下一个