我有GtkEntry
,用户必须在其中提供密码。
我做了
gtk_entry_set_visibility(GTK_ENTRY(password_entry), FALSE);
在纯文本中使用另一个符号而不是真实密码,但我希望GtkEtry
在用户输入密码时不显示文本,就像su程序一样。
我该怎么做?
答案 0 :(得分:3)
在docs,gtk_entry_set_visibility
下方,有 gtk_entry_set_invisible_char ,其中包含以下注释:
[...]如果将隐形字符设置为0,则用户将不会收到任何反馈 一点都没键入时屏幕上没有文字。
答案 1 :(得分:1)
如果找不到更好的东西,可以这样做:
将信号连接到“insert_text”上的gtk_entry(或任何gtk_editable),获取char类型,存储它,最后使用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;
}
...