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 var
      int	count;			// Number of files selected
      char	relative[FL_PATH_MAX];	// Relative filename

      if (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隐藏起来,再来获取选中的文件名。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值