我正在将应用程序从Glib移植到Qt。
我确实有很多特定于Gtk的API,但是很难在Qt中找到等效的变体。我正在寻找这些的替代方案:
任何的想法?
确实没有直接对等的功能,但这是您获得的最接近的功能:
QString QFileInfo :: fileName()常量
返回文件名,不包括路径。
注意:不要被Qt中类似的baseName()和completeBaseName()所吸引,因为它们并不相同。Qt和Glib开发人员决定对相同的事物使用不同的术语。
同样,即使这也不相同,因为对于空文件名或以斜杠结尾的文件名,其行为也不相同。
返回文件的路径。这不包括文件名。
请注意,如果为该QFileInfo对象提供了以斜杠结尾的路径,则该文件的名称将被认为是空的,并且此函数将返回整个路径。
注意:absolutePath()或canonicalPath()将无法工作,因为它们将返回绝对路径,而glib变体将返回相对路径。
只要使用std::string
,std::array
或QByteArray
。不要被那吸引住QString
了。根本不是因为这会导致UTF开销。
这是一些打印出来的代码:
#include <QFileInfo>
#include <QDebug>
#include <QByteArray>
#include <iostream>
#include <glib.h>
using namespace std;
int main()
{
const char filePath[] = "tmp/foo.bar.baz";
qDebug() << "=========== Glib ===============\n";
cout << "Base name: " << g_path_get_basename(filePath) << endl;
cout << "Directory name: " << g_path_get_dirname(filePath) << endl;
cout << "String dup: " << strdup(filePath) << endl;
qDebug() << "\n=========== Qt =================\n";
QFileInfo fileInfo(filePath);
qDebug() << "File name:" << fileInfo.fileName();
qDebug() << "Directory name:" << fileInfo.path();
qDebug() << "String dup:" << QByteArray("foo.bar.baz");
return 0;
}
TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp
packagesExist(glib-2.0) {
CONFIG += link_pkgconfig
PKGCONFIG += glib-2.0
}
qmake && make && ./main
=========== Glib ===============
Base name: foo.bar.baz
Directory name: tmp
String dup: tmp/foo.bar.baz
=========== Qt =================
File name: "foo.bar.baz"
Directory name: "tmp"
String dup: "foo.bar.baz"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句