• 8401阅读
  • 12回复

[提问]如何判断文件扩展名是否在枚举变量之中? [复制链接]

上一主题 下一主题
离线yzpdsg
 

只看楼主 倒序阅读 楼主  发表于: 2011-06-26
— 本帖被 XChinux 从 C/C++基础 移动到本区(2011-07-06) —
各位,早安。

今天碰到了一个问题,就是使用QFile访问一个文件获取了它的扩展名,是QString类型。我想定义一个支持的扩展名列表,目前使用了枚举类型。

enum fileType {jpg,jpeg,png,bmp,txt,mp3};

可是如何判断获取的扩展名是否在fileType变量之中呢?一个是QString一个是int,二者类型不一致啊。

是不是不用枚举实现?
离线diyuanbo

只看该作者 1楼 发表于: 2011-06-26
回 楼主(yzpdsg) 的帖子
必须自己建立枚举和QString的关联
QMap<fileType,QString> SupportFileType;
SupportFileType[jpg]="jpg";
SupportFileType[jpeg]="jpeg";
...
SupportFileType[mp3]="mp3";
离线jdwx

只看该作者 2楼 发表于: 2011-06-26
为什么用枚举类型?
用一个QString就解决了,“*.jpg,*.bmp,*.xxx”
QString::indexOf();就行了。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线yzpdsg

只看该作者 3楼 发表于: 2011-06-26
感谢二位提供的方法!我明白了!
离线yzpdsg

只看该作者 4楼 发表于: 2011-06-27
回 1楼(diyuanbo) 的帖子
获得的扩展名是QString类型(如"mp3"),如果要使用switch(){}该怎么写?

离线diyuanbo

只看该作者 5楼 发表于: 2011-06-27
回 4楼(yzpdsg) 的帖子
写一个函数将扩展名字符串转换成枚举
enum fileType fileExtString2FileType(const QString & StrFileExt)
{
QMap<fileType,QString> SupportFileType;
SupportFileType[jpg]="jpg";
SupportFileType[jpeg]="jpeg";
...
SupportFileType[mp3]="mp3";

return SupportFileType.key(StrFileExt,-1);//如果没有预定义的类型,返回-1
}
然后
switch(fileExtString2FileType(StrFileExt))
{
case jpg:
...
}
离线yzpdsg

只看该作者 6楼 发表于: 2011-06-29
回 5楼(diyuanbo) 的帖子
谢谢!
离线yzpdsg

只看该作者 7楼 发表于: 2011-07-05
回 5楼(diyuanbo) 的帖子
sorry,这些日子忙于俗事,今天才又时间试了一下。编译出错了,错误信息指向
rerturn SupportFileType.key(StrFileExt,-1);这一行:

invalid conversion from 'int' to 'fileType'
错误:  initializing argument 2 of 'const Key QMap<Key, T>::key(const T&, const Key&) const [with Key = fileType, T = QString]'

enum fileType MainWindow::fileExtString2FileType(const QString &StrFileExt)
{
    QMap<fileType,QString> SupportFileType;
    SupportFileType[jpg] = "jpg";
    SupportFileType[jpeg] = "jpeg";
    SupportFileType[png] = "png";
    SupportFileType[bmp] = "bmp";
    SupportFileType[txt] = "txt";
    SupportFileType[mp3] = "mp3";

    return SupportFileType.key(StrFileExt,-1);
}
离线diyuanbo

只看该作者 8楼 发表于: 2011-07-06
enum fileType MainWindow::fileExtString2FileType(const QString &StrFileExt)
改称const enum fileType MainWindow::fileExtString2FileType(const QString &StrFileExt)
离线diyuanbo

只看该作者 9楼 发表于: 2011-07-06
回 7楼(yzpdsg) 的帖子
enum fileType MainWindow::fileExtString2FileType(const QString &StrFileExt)
改称const enum fileType MainWindow::fileExtString2FileType(const QString &StrFileExt)
离线yzpdsg

只看该作者 10楼 发表于: 2011-07-08
回 9楼(diyuanbo) 的帖子
还是一样的错误。这个错误是什么意思呢?
离线yzpdsg

只看该作者 11楼 发表于: 2011-07-08
回 1楼(diyuanbo) 的帖子
我把函数的原型改成这个了:  
int fileExtString2FileType(const QString & StrFileExt);
这样就没有问题了。
离线diyuanbo

只看该作者 12楼 发表于: 2011-07-12
回 11楼(yzpdsg) 的帖子
快速回复
限100 字节
 
上一个 下一个