- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想知道是否有办法通过 gtkmm 在 Gtk::AboutDialog 类中设置自定义作者类别。我知道有以下几种方法:
但我想添加一个自定义类别。现在我有一个接受一堆插件的程序,所以在启动时扫描插件时,我想在你点击显示所有插件作者姓名的致谢名单后,在关于屏幕上填充一个“插件”页面(删除当然是重复)。逻辑已经存在,但将他们添加到他们肯定不属于的艺术家或记录者类别看起来很奇怪。
除了滚动我自己的类别之外,是否有添加新类别的简单方法?
最佳答案
好问题!在 GTK 3 中,这相当容易。您必须对“关于”对话框的内部子项进行一些操作,这在未来的版本中可能会发生变化,因此请注意!
我已经在 Vala 中编写了一个简单的示例,它可以执行您想要的操作。这对我来说更快,因为我几乎从不使用 Gtkmm。不过翻译应该不难。
using Gtk;
int main(string[] args)
{
Gtk.init(ref args);
var dialog = new AboutDialog();
// Fetch internal children, using trickery
var box = dialog.get_child() as Box;
Box? box2 = null;
ButtonBox? buttons = null;
Notebook? notebook = null;
box.forall( (child) => {
if(child.name == "GtkBox")
box2 = child as Box;
else if(child.name == "GtkButtonBox")
buttons = child as ButtonBox;
});
box2.forall( (child) => {
if(child.name == "GtkNotebook")
notebook = child as Notebook;
});
// Add a new page to the notebook (put whatever widgets you want in it)
var plugin_page_index = notebook.append_page(new Label("Plugin 1\nPlugin 2"),
new Label("Plugins"));
// Add a button that toggles whether the page is visible
var button = new ToggleButton.with_label("Plugins");
button.clicked.connect( (button) => {
notebook.page = (button as ToggleButton).active? plugin_page_index : 0;
});
buttons.pack_start(button);
buttons.set_child_secondary(button, true);
// Set some other parameters
dialog.program_name = "Test Program";
dialog.logo_icon_name = Gtk.Stock.ABOUT;
dialog.version = "0.1";
dialog.authors = { "Author 1", "Author 2" };
dialog.show_all(); // otherwise the new widgets are invisible
dialog.run();
return 0;
}
在 GTK 2 中,这要困难得多,尽管可能并非不可能。您必须使用在正常处理程序之后运行的处理程序连接到 Credits 按钮的 clicked
信号,然后获取顶层窗口列表并查找打开的新窗口。然后您可以将另一个页面添加到该窗口的 GtkNotebook
。
我建议做一些不同的事情:在操作区域添加一个插件按钮,它会打开自己的窗口。这样你就不必去搞乱内部 child 了。这是另一个 Vala 示例:
using Gtk;
class PluginsAboutDialog : AboutDialog {
private Dialog _plugins_window;
private Widget _plugins_widget;
public Widget plugins_widget { get {
return _plugins_widget;
}
set {
var content_area = _plugins_window.get_content_area() as VBox;
if(_plugins_widget != null)
content_area.remove(_plugins_widget);
_plugins_widget = value;
content_area.pack_start(value);
}}
public PluginsAboutDialog() {
_plugins_window = new Dialog();
_plugins_window.title = "Plugins";
_plugins_window.add_buttons(Stock.CLOSE, ResponseType.CLOSE, null);
_plugins_window.response.connect((widget, response) => { widget.hide(); });
var buttons = get_action_area() as HButtonBox;
// Add a button that opens a plugins window
var button = new Button.with_label("Plugins");
button.clicked.connect( (button) => {
_plugins_window.show_all();
_plugins_window.run();
});
button.show();
buttons.pack_start(button);
buttons.set_child_secondary(button, true);
}
public static int main(string[] args) {
Gtk.init(ref args);
var dialog = new PluginsAboutDialog();
// Make a widget for the plugins window
var can_be_any_widget = new Label("Plugin 1\nPlugin 2");
dialog.plugins_widget = can_be_any_widget;
// Set some other parameters
dialog.program_name = "Test Program";
dialog.logo_icon_name = Gtk.Stock.ABOUT;
dialog.version = "0.1";
dialog.authors = { "Author 1", "Author 2" };
dialog.run();
return 0;
}
}
关于c++ - 将自定义作者类别添加到 Gtk::AboutDialog 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7562429/
我的英语很差,抱歉 这是我的结构: bookstore ---author(app1) ---book(app2) 或者在代码中: from django.db import models from
我有以下脚本从C:驱动器中检索特定文件类型,并将特定文件属性输出到定界的CSV文件。我还希望能够检索文件所有者和作者。很感谢任何形式的帮助。 # PowerShell script to list t
我们厌倦了掉毛。所以我们要使用 black在我们的项目中。不幸的是,它几乎改变了我们项目中的所有其他行,这会使我们丢失大部分作者信息。我们使用 annotate在 pycharm 或 git blam
我在我的asp.net网站中嵌入了java applet来进行数字签名,它在本地主机上工作,但是当发布它时,java applet在浏览器上运行但是未定义在java小程序上调用函数的java脚本代码
我无法找出一种有效的方法来建立表之间的关系。我想拥有一个包含书籍,作者,出版商和注册用户的数据库,并拥有他们的书架(阅读,当前阅读,想要阅读(或计划阅读))。我希望用户能够选择他们已经阅读,想要阅读或
我已经将我的 Git 作者作者姓名从“名尾 ”到“名尾 ” 这两个电子邮件地址与不同的 Github 帐户相关联,我正在将我所有的个人项目迁移到第二个。 我的问题是,我过去在某些私有(private)
我正在使用 svn2git 从现有的 SVN 存储库创建 Git 存储库。我把它全部下载了(所有 10 多个分支、10 多个标签、>4000 次提交)并在 Git 存储库中。现在,不幸的是,所有的作者
问题: 在 HTML 中,您可以使用 author 元标记(或 DC creator)来指示某人是信息(即内容)的作者。但是,我希望能够在元标记中将自己标记为 Web 应用程序开发人员。 大多数人(在
我确信在 git 中有一种方法可以做到这一点,但我的搜索结果是空的。有没有一种简单的方法可以从一次提交中获取消息、提交作者、提交日期和其他信息,并使用这些数据修改第二次提交,而无需复制实际的提交内容?
我已经设置了自己的私有(private) git 服务器,并且有一个 5 人的团队。我已经设置了他们的所有用户帐户,但是我如何防止由随机的奇怪帐户完成对远程的提交。因为我的一些团队也使用 github
我正在阅读这篇文章“http://lethain.com/introduction-to-architecting-systems-for-scale/”。最后,作者提到了平台层。我不明白这一层的范围
我需要在 Mac 上更改 PDF 文件的作者。我曾尝试使用 grep 和 sed 来完成此操作,但没有成功。 如果我在 Preview.app 中打开一个 PDF 文件并转到“工具”>“显示检查器”,
我正在运行此查询。它在 DBpedia ( http://dbpedia.org/sparql ) 上运行良好,但在我的 Java 代码中不起作用: PREFIX res: PREFIX dbped
我有一个用 C 语言模拟读者-作者问题的简单程序。要求用户输入作者数和读者数。然后创建随机数的编写器 - 线程和读取器 - 线程。项目的写入由全局变量 itemsCount 模拟 - 它代表新插入项目
我尝试在 wordpress 中设置一个作者页面。但是所有的作者页面都被重定向到主页。我用谷歌搜索,他们建议禁用插件,然后检查作者页面。我试了一下,发现 Yoast wordpress SEO plu
所以我从 SQL 背景转向 NoSQL。所以我知道我应该在这里“非规范化”。所以基本上我对我必须做的事情有一个简化的想法; 用户这些文件包含身份验证信息,可能是付款方式、用户名和各种详细信息 帖子这些
所以我已经成功地以 domenic 的身份提交了一个 GitHub 项目和 Domenic Denicola .这很烦人,尤其是对于生成摘要。 我知道 how to change the auth
在 PhpStorm 中,我很难在项目设置中设置默认的 git 作者: 我使用“Action finder”并搜索了设置,但我没有找到这个选项。 有谁知道我可以在哪里更改这个值,这样我就不必在每次提交
我一直在尝试使用 php5-ffmpeg 扩展来获取远程 mp3(和其他格式)元数据。 尽管我总是缺少标题、作者、评论、艺术家详细信息,但它正在工作。 我一直在网上搜索答案,但没有找到任何解决方案。
通常,将一些带有作者,版本和许可证信息的行添加到源文件的顶部被认为是一种好习惯。例如,Gnu GPL v3建议添加 Copyright (C) This program is free sof
我是一名优秀的程序员,十分优秀!