我在C中使用GTK +和glade工具开发了一个弹出窗口(非装饰).当单击一个按钮时,它会在其父窗口中弹出.我想在用户点击此窗口时销毁或隐藏此弹出窗口.用户可以单击父窗口或任何其他窗口.我试图捕获GDK_FOCUS_CHANGE事件,但我无法捕获此事件.有没有办法实现这个目标?我怎么知道点击是在其他窗口然后弹出窗口?怎么清楚弹出窗口已经失去了它的焦点?所以我可以隐藏它.相关代码如下:
/*
* Compile me with:
gcc -o popup popup.c $(pkg-config --cflags --libs gtk+-2.0 gmodule-2.0)
*/
#include <gtk/gtk.h>
static void on_popup_clicked (GtkButton*, GtkWidget*);
static gboolean on_popup_window_event(GtkWidget*, GdkEventExpose*);
int main (int argc, char *argv[])
{
GtkWidget *window, *button, *vbox;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "Parent window");
gtk_container_set_border_width (GTK_CONTAINER (window), 10);
gtk_widget_set_size_request (window, 300, 300);
gtk_window_set_position (GTK_WINDOW (window),GTK_WIN_POS_CENTER);
button = gtk_button_new_with_label("Pop Up");
g_signal_connect (G_OBJECT (button), "clicked",G_CALLBACK (on_popup_clicked),(gpointer) window);
vbox = gtk_vbox_new (FALSE, 3);
gtk_box_pack_end(GTK_BOX …Run Code Online (Sandbox Code Playgroud) 我有一个Loader使用我正在加载多个屏幕/页面.
我有大约10个QML屏幕/页面,我在鼠标事件中逐个加载到加载程序中.
在某些屏幕上,我需要使用QWidget::setMask()功能设置透明度,使屏幕/页面的某些部分变得透明,并在屏幕上打孔.
我使用CPP代码做设定屏蔽QWidget::setMask()的rootObject,这是Loader屏幕.
QWidget::setMask 工作正常,但屏蔽区域显示以前加载的屏幕/页面.
所以我有一个问题,如在文档http://doc.qt.nokia.com/4.7-snapshot/qml-中提到的那样,Loader元素在加载新屏幕/页面之前是否正确地从显示中删除/删除了已加载的组件.loader.html.Loader
还有两个名为Component.onDestroyedand的函数Component.onDestruction
当我在Loader onDestruction事件中加载新的屏幕/页面时,被加载的屏幕被触发.
我想在加载器中加载新页面后,从显示中完全删除/销毁屏幕/页面.我还尝试设置以前加载的屏幕的可见性和不透明度,但我仍然可以在蒙版区域中看到以前加载的屏幕/页面.
如果我设置了加载器source = "",sourceComponent = undefined然后我也可以在Loader中看到之前加载的页面,它不会刷新屏幕.上一页被销毁,但未从显示中清除/删除.
应该是什么原因?
我正在尝试WorkerScript用于在 QML 中加载列表模型元素。
但是WorkerScript一旦我们完成更新,我们怎么能停下来呢?
有什么方法可以破坏或阻止WorkerScript?
我通过以下方式将字节数组转换为String:
public static String byteArrayToString(byte[] bytes)
{
return new String(bytes);
}
Run Code Online (Sandbox Code Playgroud)
但这种方法需要很长时间.有没有有效的方法将字节数组转换为String?