gtk 中如何禁止一个entry的复制、剪切、粘贴

发布于 2022-08-03 18:58:56 字数 152 浏览 6 评论 2

请问GTK编程中如何禁止一个文本框(GtkEntry)的复制、剪切和粘贴操作?

多谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

悍妇囚夫 2022-08-06 09:45:44

谢谢2楼的回复

如果要在Glade里做,该如何做呢?

单身情人 2022-08-05 03:19:13

自己定义一个基于GtkEntry的控件,然后把GtkEntryClass中的cut_clipboard,copy_clipboard,paste_clipboard置为空就可以了,下面给你一个示例。
myentry.h:

#ifndef _MY_ENTRY_H_
#define _MY_ENTRY_H_

#include <gtk/gtk.h>

#define MY_TYPE_ENTRY                  (my_entry_get_type ())
#define MY_ENTRY(obj)                  (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ENTRY, MyEntry))
#define MY_ENTRY_CLASS(klass)          (G_TYPE_CHECK_CLASS_CAST ((klass), MY_TYPE_ENTRY, MyEntryClass))
#define MY_IS_ENTRY(obj)               (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ENTRY))
#define MY_IS_ENTRY_CLASS(klass)       (G_TYPE_CHECK_CLASS_TYPE ((klass), MY_TYPE_ENTRY))
#define MY_ENTRY_GET_CLASS(obj)        (G_TYPE_INSTANCE_GET_CLASS ((obj), MY_TYPE_ENTRY, MyEntryClass))

typedef struct _MyEntry {
  GtkEntry parent;
} MyEntry;

typedef struct _MyEntryClass {
  GtkEntryClass parent_class;
} MyEntryClass;

GType      my_entry_get_type                   (void) G_GNUC_CONST;

GtkWidget* my_entry_new (void);

#endif

myentry.c:

#include "myentry.h"

G_DEFINE_TYPE (MyEntry, my_entry, GTK_TYPE_ENTRY)

static void my_entry_class_init (MyEntryClass *klass)
{
  GtkEntryClass *entry_class = GTK_ENTRY_CLASS (klass);

  entry_class->cut_clipboard = NULL;
  entry_class->copy_clipboard = NULL;
  entry_class->paste_clipboard = NULL;
}

static void my_entry_init (MyEntry *entry)
{
}

GtkWidget *my_entry_new (void)
{
  return g_object_new (MY_TYPE_ENTRY, NULL);
}

main.c:

#include <stdio.h>
#include <gtk/gtk.h>

#include "myentry.h"

int
main (int argc, char **argv)
{
  GtkWidget *mainwindow;
  GtkWidget *entry;

  gtk_init(&argc, &argv);

  mainwindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  g_signal_connect (G_OBJECT (mainwindow),
                    "delete_event",
                    G_CALLBACK (gtk_main_quit),
                    NULL);

  entry = my_entry_new ();
  gtk_widget_show (entry);
  gtk_container_add (GTK_CONTAINER (mainwindow), entry);

  gtk_widget_show_all (GTK_WIDGET (mainwindow));
  gtk_main ();
  return 0;
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文