欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

FLTK Fl_File_Chooser的使用

发布时间:2023/12/31 55 豆豆
生活随笔 收集整理的这篇文章主要介绍了 FLTK Fl_File_Chooser的使用 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

FLTK Fl_File_Chooser的使用

默认的Fl_File_Chooser的界面是这样的。

可以构造函数参数可以选择单个文件、多个文件、文件夹以及创建新文件。

如何获取选择的(多个)文件,需要写Fl_File_Chooser的回调函数。

//下标是从1开始的,使用0开始的下标也不报错,看到官方文档的实例代码才找到原因 void FileChooser_cb(Fl_File_Chooser* fc, void* data) {for (int i = 1; i <= fc->count(); i++){const char* currentFilename = fc->value(i);cout << currentFilename << endl;} } ****构造函数**** 第一个参数是默认路径,第二个参数是过滤器filter 可以用 | 增加其他文件拓展名,,第三个参数 选择单个文件SINGLE,多个文件MULTI,创建CREATE,文件夹(存在,一个)DIRECTORY //main函数 int main(int argc, char* argv[]) {Fl_File_Chooser fc(".", "TIF (*.tif)", Fl_File_Chooser::MULTI,"File Chooser");fc.callback(FileChooser_cb);fc.show();return Fl::run(); }

如何得到选择的文件名困扰了我许久,仔细研究实例代码终于发现端倪。
Chooser不能直接返回选中的文件名,这里指点击确定按钮后。如果使用上面的回调函数,寻找文件过程中点到的其他文件夹或者误点的其他文件,文件名都被会被 value 函数返回,这样就没办法判断自己选中的文件名了。
得到最终选定的文件名,需要配合 visible 函数使用。

void show_callback(void) {int i; // Looping varint count; // Number of files selectedchar relative[FL_PATH_MAX]; // Relative filenameif (filter->value()[0])fc->filter(filter->value());fc->show();//精髓就在这里while (fc->visible()) {Fl::wait();}count = fc->count();if (count > 0){files->clear();for (i = 1; i <= count; i ++){if (!fc->value(i))break;fl_filename_relative(relative, sizeof(relative), fc->value(i));files->add(relative,Fl_File_Icon::find(fc->value(i), Fl_File_Icon::PLAIN));}files->redraw();} }

上面是demo的源码,等到Chooser隐藏起来,再来获取选中的文件名。

总结

以上是生活随笔为你收集整理的FLTK Fl_File_Chooser的使用的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。