gtk 窗口坐标转换为屏幕坐标
时间: 2023-10-21 07:07:31 浏览: 91
在 GTK 中,可以使用 `gtk_window_get_position()` 函数获取窗口相对于屏幕左上角的坐标。如果你想将窗口中的某个控件的坐标转换为屏幕坐标,可以使用 `gtk_widget_translate_coordinates()` 函数。这个函数需要传入两个参数:源 widget 和目标 widget。如果你想将源 widget 的坐标转换为屏幕坐标,则将目标 widget 设为 `NULL`。示例代码如下:
```c
GtkWidget *widget; // 源 widget
gint x, y; // 源 widget 相对于窗口左上角的坐标
gtk_widget_translate_coordinates(widget, GTK_WINDOW(window), x, y, &x, &y);
```
在这个例子中,`window` 是窗口的指针。`x` 和 `y` 是源 widget 相对于窗口左上角的坐标,`&x` 和 `&y` 则是输出参数,存储转换后的屏幕坐标。
相关问题
gtk4 窗口 居中
GTK4是一个用于构建图形用户界面(GUI)的跨平台工具包,它通常用于Vala或C语言中。在GTK4中,让窗口居中可以使用`gtk_window_set_default_size()`函数设置默认大小,并结合`gtk_window_position()`调整窗口位置。下面是一个简单的例子:
```c
#include <gio/gio.h>
#include <gtk/gtk.h>
void on_window_destroyed(GtkWidget* widget, gpointer data) {
gtk_main_quit();
}
int main(int argc, char** argv) {
GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "中心化窗口");
gtk_window_set_default_size(GTK_WINDOW(window), 600, 400); // 设置窗口默认大小
// 居中窗口
gint screen_width, screen_height;
gdk_screen_get_size(gdk_display_get_default(), &screen_width, &screen_height);
int x = (screen_width - gtk_widget_get_allocation(window)->width) / 2;
int y = (screen_height - gtk_widget_get_allocation(window)->height) / 2;
gtk_window_move(GTK_WINDOW(window), x, y);
g_signal_connect(window, "destroy", G_CALLBACK(on_window_destroyed), NULL);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
```
在这个示例里,我们首先创建一个顶级窗口,然后计算屏幕尺寸并确定窗口的位置以使其居中。当窗口关闭时,`on_window_destroyed`回调会触发程序退出。
linux QT嵌入GTK窗口时,指定gtk父窗口
在将GTK窗口嵌入到QT应用程序中时,可以使用`gtk_widget_set_parent()`函数来指定GTK父窗口。以下是一个简单的示例代码:
```c++
#include <gtk/gtk.h>
#include <QApplication>
#include <QVBoxLayout>
#include <QX11EmbedContainer>
#include <QWidget>
int main(int argc, char** argv)
{
QApplication app(argc, argv);
// 创建一个QT主窗口
QWidget window;
// 创建一个QX11EmbedContainer,用于嵌入GTK窗口
QX11EmbedContainer container(&window);
// 获取GTK父窗口
GtkWidget* gtkParentWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
// 将GTK父窗口指定为QX11EmbedContainer的父窗口
gtk_widget_set_parent(gtkParentWindow, container.winId());
// 创建一个GTK按钮并将其添加到GTK父窗口中
GtkWidget* gtkButton = gtk_button_new_with_label("GTK Button");
gtk_container_add(GTK_CONTAINER(gtkParentWindow), gtkButton);
// 将QX11EmbedContainer添加到QT布局中
QVBoxLayout layout(&window);
layout.addWidget(&container);
window.show();
return app.exec();
}
```
上述示例代码创建了一个QT主窗口,并在该窗口中嵌入了一个GTK按钮。`gtk_widget_set_parent()`函数用于指定GTK父窗口,将GTK按钮添加到该父窗口中。通过使用QX11EmbedContainer,可以在QT应用程序中嵌入GTK窗口。
阅读全文