gpt4 book ai didi

c++ - 从 Glib 移植到 Qt

转载 作者:太空狗 更新时间:2023-10-29 20:12:26 25 4
gpt4 key购买 nike

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

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

  • g_path_get_basename
  • g_path_get_dirname
  • 结构

有什么想法吗?

最佳答案

这些确实没有直接等价,但这是最接近的:

g_path_get_basename

QString QFileInfo::fileName() const

Returns the name of the file, excluding the path.

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

此外,即使这样也是不一样的,因为对于空文件名或以斜杠结尾的文件名,它的行为方式不同。

g_path_get_dirname

QString QFileInfo::path() const

Returns the file's path. This doesn't include the file name.

Note that, if this QFileInfo object is given a path ending in a slash, the name of the file is considered empty and this function will return the entire path.

注意:absolutePath()canonicalPath()将不起作用,因为它们将返回绝对路径,而 glib 变体返回相对路径。

结构化

只需使用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;
}

主程序

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"

关于c++ - 从 Glib 移植到 Qt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27657288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com