从Glib移植到Qt

塞布

我正在将应用程序从Glib移植到Qt。

我确实有很多特定于Gtk的API,但是很难在Qt中找到等效的变体。我正在寻找这些的替代方案:

  • g_path_get_basename
  • g_path_get_dirname
  • strdup

任何的想法?

lpapp

确实没有直接对等的功能,但这是您获得的最接近的功能:

g_path_get_basename

QString QFileInfo :: fileName()常量

返回文件名,不包括路径。

注意:不要被Qt中类似的baseName()completeBaseName()所吸引,因为它们并不相同。Qt和Glib开发人员决定对相同的事物使用不同的术语。

同样,即使这也不相同,因为对于空文件名或以斜杠结尾的文件名,其行为也不相同。

g_path_get_dirname

QString QFileInfo :: path()常量

返回文件的路径。这不包括文件名。

请注意,如果为该QFileInfo对象提供了以斜杠结尾的路径,则该文件的名称将被认为是空的,并且此函数将返回整个路径。

注意absolutePath()canonicalPath()将无法工作,因为它们将返回绝对路径,而glib变体将返回相对路径。

strdup

只要使用std::stringstd::arrayQByteArray不要被那吸引住QString了。根本不是因为这会导致UTF开销。

这是一些打印出来的代码:

main.cpp

#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;
}

main.pro

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将Qt4移植到Qt5

来自分类Dev

GLib类型的位大小和可移植到更多奇特(例如16位字符)平台的可移植性

来自分类Dev

GLib类型的位大小和可移植到更多奇特(例如16位字符)平台的能力

来自分类Dev

将Qt4移植到Qt5,获取OpenGL调用无法解析的外部符号

来自分类Dev

从qt4.8移植到qt5.2后出现运行时错误

来自分类Dev

从Qt 5.2移植到Qt 5.3时,小部件没有边框

来自分类Dev

如何使用C ++后端将Qt QML移植到Web服务器

来自分类Dev

OpenGL应用程序移植到Qt5后看起来很奇怪

来自分类Dev

从MySql移植到Redis

来自分类Dev

从bash移植到Gradle

来自分类Dev

查询移植到Impala

来自分类Dev

查询移植到Impala

来自分类Dev

从bash移植到Gradle

来自分类Dev

从Volley移植到翻新

来自分类Dev

将javascript移植到dart

来自分类Dev

从Python移植到Go的算法

来自分类Dev

从Lua 5.1移植到5.2

来自分类Dev

将javascript移植到dart

来自分类Dev

Delphi到Java的移植问题

来自分类Dev

从C ++移植到C ++ / CLI

来自分类Dev

在Android上使用QtDBus移植Qt应用

来自分类Dev

将Python代码移植到Android

来自分类Dev

将Duff的设备从C移植到JavaScript

来自分类Dev

将XOR加密代码移植到PHP

来自分类Dev

将OpenGL glBegin()移植到OpenGL ES

来自分类Dev

将CMake移植到OS X Yosemite

来自分类Dev

将C库移植到C ++

来自分类Dev

将SDL 2.0游戏移植到Android

来自分类Dev

麻烦将cURL从bash“移植”到PHP