- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 Glade、GtkBuilder 和 C 在 GTK 中制作一个简单的文本编辑器(作为练习)。我有一个包含剪切、复制和粘贴的编辑菜单以及一个用于文本的 GtkTextView。 GtkTextView 会自动为自己绑定(bind)剪切/复制/粘贴序列(如果您右键单击,甚至会提供菜单项)。我想将菜单栏中的剪切、复制和粘贴菜单项连接到我的 TextView ,以便它们按预期运行。
请注意,这是双向连接。 (1) 当剪切、复制或粘贴 GtkMenuItem 之一被激活时,它告诉 GtkTextView 做一些事情。 (2) 当在 GtkTextView 中进行选择或清除选择时,剪切和复制分别被启用或禁用(以 gedit 为例)。此外,(3)是否启用粘贴取决于剪贴板的状态。
如何将我的剪切、复制和粘贴菜单项连接到 TextView ?有没有办法在 Glade 中做到这一点,或者我的 C 程序是否需要一些额外的代码?是否有简化的方法来执行此操作,或者我是否需要手动实现上一段中所述的所有三种行为?
最佳答案
您将需要一些额外的 C 代码,但不多。对于此示例,我假设您正在为菜单项使用 GtkAction
,但如果您不是,解决方案应该是相似的。
首先在 Glade 中进行剪切、复制和粘贴操作的回调。当您连接信号时,传递一些至少包含指向剪切、复制和粘贴操作以及 TextView 的指针的数据结构作为用户数据。
void
on_cut(GtkAction *action, SomeStruct *data)
{
g_signal_emit_by_name(data->view, "cut-clipboard", NULL);
gtk_action_set_sensitive(data->paste_action, TRUE);
}
void
on_copy(GtkAction *action, SomeStruct *data)
{
g_signal_emit_by_name(data->view, "copy-clipboard", NULL);
gtk_action_set_sensitive(data->paste_action, TRUE);
}
void
on_paste(GtkAction *action, SomeStruct *data)
{
g_signal_emit_by_name(data->view, "paste-clipboard", NULL);
}
接下来,连接到 GtkTextBuffer
的 notify::has-selection
信号:
void
on_has_selection_notify(GtkTextBuffer *buffer, GParamSpec *pspec, SomeStruct *data)
{
gboolean has_selection = gtk_text_buffer_get_has_selection(buffer);
gtk_action_set_sensitive(data->cut_action, has_selection);
gtk_action_set_sensitive(data->copy_action, has_selection);
}
要确定粘贴操作的初始状态(以防启动应用程序时剪贴板上有文本),请在构建界面时运行以下代码:
gtk_action_set_sensitive(data->paste_action,
gtk_clipboard_wait_is_text_available(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD)));
这假定用户无法手动清除剪贴板(大多数程序不允许您这样做。)
读者注意:此处输入的代码均未经测试。
关于c - 如何将 GtkTextView 连接到 GtkMenuItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2122215/
如何设置 GtKTextView 的大小?我想我不能使用 gtk_widget_set_usize。 最佳答案 您不能直接控制小部件的大小,而是由其容器完成。您可以使用 gtk_widget_set_
你好我在 C 上使用 Gtk,我需要在我的窗口中间有一个 GtkTextView 和许多其他小部件,我不能让小部件换行。这是一个非常烦人的行为,有人知道我错过了什么吗?这是我用来设置它的属性的代码:
我正在尝试实现一个 TextView ,当用户单击它时将选中所有文本。但是,当我尝试以下操作时,单击 TextView 时未选择文本,尽管在拖动窗口后选择了文本。 考虑这个最小的例子: #includ
我第一次接触 GTK 和 glade,遇到了一个非常烦人的问题。当我在 TextView 中输入文本时,TextView 会自动调整大小,将其他小部件推开。 这是一个非常烦人的行为。我不希望我的 Te
如何在 Linux 工作环境下使用 GTKTextView 添加项目符号和编号。 最佳答案 先从阅读开始Text Widget Overview 那我觉得你需要结合GtkTextTag (用于格式化文
通过 gtk_widget_modify_font() 为 GtkTextView 设置默认字体非常容易。 ,但如何获取 哪个是当前的? (我没有在小部件中使用任何标签。) 最佳答案 您可以使用 gt
我想知道将顶部和底部边距添加到 GtkTextView 的正确且普遍接受的方法位于 GtkScrolledWindow 内.有设置左右边距的功能,我正在使用: gtk_text_view_set_le
如何更改 GtkTextView 的背景颜色?我尝试使用普通的小部件设置 bg 功能,但 gtk 只是改变了 GtkText View 的边框颜色。 另外,有些人可以用简单的例子解释一下,如何更改 G
如何将文本打印(例如在标签中)到 GtkTextView 中? 对于 GtkLabel 和 GtkEntry 有 gtk_label_get_text() 和 gtk_entry_get_text()
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我想制作一个 TextView ,它将输出可能有多行长的字符串,并在它们到达窗口边框时将它们分开。窗口设置为不可调整大小,因此其大小是固定的。 我试图获取列号和行号并使用它们,但每个字符都有不同的像素
我正在尝试使用 Gtk 开发应用程序,但在使用 GtkOverlay 时遇到了问题。如果我有一个带有使用标准容器 add 方法添加的 GtkTextView 的 GtkOverlay,则文本将被隐藏。
我不明白如何将文本加载到 GtkTexView 中,它是如何完成的? 最佳答案 您必须访问 Buffer 属性,该属性表示包含 GtkTextView 显示的所有内容的缓冲区。 要简单地加载文本,您必
或者“如何向 GtkTextView 添加可见(细)边框”?这可能吗? 提前谢谢您。 最佳答案 几年后......但在网络上搜索仍然没有给出这个问题的好的答案。 解决方案非常简单:只需创建一个GtkF
我正在使用 Glade、GtkBuilder 和 C 在 GTK 中制作一个简单的文本编辑器(作为练习)。我有一个包含剪切、复制和粘贴的编辑菜单以及一个用于文本的 GtkTextView。 GtkTe
我正在尝试使用多个游标编辑相同的文本(我已将其存储在 GtkTextBuffer 中,但欢迎使用替代方案),每个游标都在一个单独的 GtkTextView 中。我需要所有光标都能够编辑文本(并反射(r
我尝试了这个,它生成了一个 TextView 窗口: http://zetcode.com/tutorials/gtktutorial/gtktextview/ 但我不希望它可编辑。 顺便问一下,当文
嘿,我想知道是否可以使用 css 样式表为 gtktextview 中的特定字母着色。 例如。 .T { color: blue; } .A { color: red; } etc..
我想加载一个文件,然后显示它的内容。为此,我正在使用 Gtkmm,我已经能够弹出文件选择器对话框。但是,选择文件后,仅显示文件中的最后一条语句。这是我正在做的: case(RESPONSE_OK):
我想将 • 插入到 GtkTextView 小部件中。在 Python + pyGTK 中,这一行就足够了: self.__textBuffer.insert_at_cursor(u'\u2022')
我是一名优秀的程序员,十分优秀!