zoukankan      html  css  js  c++  java
  • 关于GtkEntry无法键入光标

    今天,准确地说是昨天,遇到一个很诡异的问题,这个问题并不常见:

    用GTK创建文本输入框(GtkEntry),编译通过并生成exe后运行,发现根本不能输入文本,甚至连光标都无法键入。

    示例代码如下:

    #include <gtk/gtk.h>  int main(int argc, char *argv[]) {  	GtkWidget *window; 	GtkWidget *entry;  	gtk_init(&argc, &argv);  	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);  	gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); 	gtk_window_set_title(GTK_WINDOW(window), "GtkEntry"); 	gtk_container_set_border_width(GTK_CONTAINER(window), 10);  	entry = gtk_entry_new();  	gtk_container_add (GTK_CONTAINER (window), entry); 	gtk_widget_show_all(window);  	g_signal_connect(window, "destroy", 		G_CALLBACK(gtk_main_quit), NULL);  	gtk_main();  	return 0; }

    上面的代码当然只是作为演示,运行截图如下:

    无论我怎么拼命地在文本框中点击鼠标,光标就是进不去,这让我非常苦恼。由于接触GTK也不是很久,一开始就是检查代码,确定代码无误之后,我将代码发给师兄,在他那里运行竟然完全正确!

    也许是环境没有配置好。我用的是Visual Studio 2005,系统是64位的Windows 7。在将开发环境重新搭建甚至后来重装了系统之后,居然还是没有用!真是郁闷。

    看来同样的代码在不同的机器上编译运行会有差别的。于是在网上找找原因,没有直接解决这个问题的。

    但是偶然看到一篇文章:http://fitren.i.sohu.com/blog/view/93178466.htm

    这里边的代码我拷过来运行,居然可以在里边的文本框输入文本,这让我看到了希望,于是好好的比较了两段代码。

    总算找出问题所在:设置各个控件显示的语句的位置。

    我的代码是将所有控件创建布局好了之后,在最后来一句gtk_widget_show_all(window);

    而他的代码,是每创建一个控件并稍作设置之后,就用gtk_widget_show()函数显示。

    后来经过不断的测试发现,主要是设置主窗口window的显示。很多人都喜欢在最后来一句gtk_widget_show_all(window);

    这样当然非常方便,但是一些罕见的问题也许就会发生,就好比我遇到的。针对我上面的问题,我的解决办法是:

    在gtk_widget_show_all(window);前边添加gtk_widget_show(window); 

    这样,运行之后如下:

    就在我沾沾自喜的时候,突然发现不加gtk_widget_show(window);这句,也能够输入,前提是运行时带着控制台窗口。我们在开发 时通常带着控制台窗口以便测试,最后再将它去掉。在我的电脑上运行的时候,同时弹出上面的GtkEntry窗口以及控制台窗口,但是默认选中的是 GtkEntry窗口,此时如果先选中一下控制台窗口,再回来选中GtkEntry窗口,就可以输入文本框了。

    但是这样,麻烦不说,以后把控制台黑框去掉,还是不管用。所以,上面的解决方法还是必要的。

    这个问题并不常见,我用的是64位Windows 7 + Visual Studio 2005,估计跟系统和机器有关。

    至于为什么会有上面的问题,那要深入研究GTK了。

  • 相关阅读:
    APC 注入
    远程线程注入突破SESSION 0
    .Net审计之.Net Json反序列化
    PHP审计之BEESCMS审计案例
    Thinkphp5学习笔记
    mysql 必知必会整理—触发器[十五]
    mysql 必知必会整理—游标[十四]
    mysql 必知必会整理—存储过程[十三]
    mysql 必知必会整理—视图[十二]
    mysql 必知必会整理—表[十一]
  • 原文地址:https://www.cnblogs.com/shihao/p/2697878.html
Copyright © 2011-2022 走看看