在任何情况下在 X11 中显示消息框

Showing a message box in X11 under any circumstances

提问人:Felix.leg 提问时间:11/15/2023 最后编辑:genpfaultFelix.leg 更新时间:11/16/2023 访问量:75

问:

我想做一个可以在任何(或至少大多数)基于 X11 的 GUI 系统中运行的程序,无论是 KDE、Gnome、Xfce 等。 因此,我得出结论,我必须仅使用 X11 函数编写它。不幸的是,我发现 X11 不支持 UTF-8 编码。

我现在想要的只是当我的程序崩溃并且无法使用任何更高级别的 GUI 系统时,以某种方式向最终用户显示一个消息框。

我听说过一些控制台应用程序,例如“zenity”和“kdialog”。但是我不能使用它们,因为 我不能保证它们中的任何一个都可用(例如,我的发行版默认情况下没有安装此类软件)

C++ Linux X11

评论

2赞 n. m. could be an AI 11/15/2023
“X11 不支持 UTF-8 编码。”不是真的。
2赞 Sam Varshavchik 11/15/2023
你可能会惊讶地发现,一个使用GTK的程序在KDE或XFCE桌面上可以很好地运行。Linux 发行版的包管理器的工作是确保所有依赖项都已正确安装,而您不必担心它们。

答:

0赞 Bart McEndree 11/15/2023 #1

try https://github.com/Eleobert/MessageBox-X11 这是一个轻量级的消息框项目,仅使用 X11 进行渲染,如果您想避免对项目的外部依赖,这将非常有用。该功能旨在为您提供灵活性。您可以通过更改源代码轻松自定义输出。

评论

0赞 Felix.leg 11/15/2023
我也发现了,但这个项目使用 s。我的应用程序有正常的 swcharchar
0赞 n. m. could be an AI 11/16/2023
@Felix.leg 如果您不知道如何将字符串转换为字符串,您可能应该学习如何做到这一点。charwchar_t
1赞 Erdal Küçük 11/16/2023 #2

您的问题有两种可能的解决方案。

要么通过

Xutf8DrawString(见 这里 or 这里)

或者,如果宏不存在,则必须将多字节序列转换为双字节序列(示例可在此处找到),并使用 XDrawText16XDrawString16 绘制字符串。X_HAVE_UTF8_STRING

另请参阅:Core Font 子系统

评论

0赞 Felix.leg 11/16/2023
感谢您的回答!最终我发现了 Xft 扩展,但您的回答让我走上了成功代码的正确轨道。