2

我有一个GtkEntry,用户必须在其中提供密码。

我做了

gtk_entry_set_visibility(GTK_ENTRY(password_entry), FALSE);

在纯文本中使用另一个符号而不是真实密码,但我希望在GtkEtry用户输入密码时不显示文本,就像 su 程序一样。

我怎样才能做到这一点?

4

2 回答 2

3

docs的正下方gtk_entry_set_visibility,有gtk_entry_set_invisible_char,它有以下注释:

[...] 如果您将 invisible char 设置为 0,那么用户将根本得不到任何反馈;他们键入时屏幕上不会有文字。

于 2012-10-19T18:40:43.860 回答
1

如果你找不到更好的东西,你可以这样做:

将信号连接到“insert_text”上的 gtk_entry(或任何 gtk_editable),获取输入的字符,存储它,最后使用 g_signal_stop_emission_by_name(G_OBJECT(editable),“insert_text”);隐藏字符

例如,此代码丢弃非数字字符:

g_signal_connect(G_OBJECT(form->field[i].control), "insert_text", G_CALLBACK(insert_text_handler), GINT_TO_POINTER(form->field[i].type_of));

void insert_text_handler(GtkEditable *editable, const gchar *text, gint length, gint *position, gpointer data)
{
    gint i;

    switch(GPOINTER_TO_INT(data)) {
        case TYPE_DIGIT:
            for (i = 0; i < length; i++) {
                if (!isdigit(text[i])) {
                    g_signal_stop_emission_by_name(G_OBJECT(editable), "insert_text");
                    return;
                }

...
于 2012-10-19T19:07:50.063 回答