QTCreator 运行gtk4

先下载gtk的库:

https://labisart.com/blog/index.php/Home/Index/article/aid/336

然后新建plainc++工程,链接上:

SRCDIR = $$PWD/../GTK4_Gvsbuild_2024.12.0_x64LIBDIR = $${SRCDIR}/lib

LIBS += \
    $${LIBDIR}/gio-2.0.lib \
    $${LIBDIR}/cairo.lib \
    $${LIBDIR}/gdk_pixbuf-2.0.lib \
    $${LIBDIR}/glib-2.0.lib \
    $${LIBDIR}/gtk-4.lib \
    $${LIBDIR}/harfbuzz.lib \
    $${LIBDIR}/pango-1.0.lib \
    $${LIBDIR}/graphene-1.0.lib \
    $${LIBDIR}/gobject-2.0.lib \

INCDIR = $${SRCDIR}/include
INCLUDEPATH += \
    $${INCDIR} \
    $${INCDIR}/gtk-4.0/ \
    $${INCDIR}/glib-2.0/ \
    $${LIBDIR}/glib-2.0/include/ \
    $${INCDIR}/cairo/ \
    $${INCDIR}/pango-1.0 \
    $${INCDIR}/harfbuzz \
    $${INCDIR}/gdk-pixbuf-2.0 \
    $${INCDIR}/graphene-1.0 \
    $${LIBDIR}/graphene-1.0/include \

最后给示例程序:

#include <iostream>
#include <Windows.h>
#include <gtk-4.0/gtk/gtk.h>


static void print_hello(GtkWidget* widget, gpointer data)
{
    g_print("Hello World\n");
}

static void activate(GtkApplication* app, gpointer user_data)
{
    GtkWidget* window;
    GtkWidget* button;
    GtkWidget* box;

    // 创建 window
    window = gtk_application_window_new(app);
    gtk_window_set_title(GTK_WINDOW(window), "Window");
    gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);

    // box layout
    box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
    gtk_widget_set_halign(box, GTK_ALIGN_CENTER);
    gtk_widget_set_valign(box, GTK_ALIGN_CENTER);
    gtk_window_set_child(GTK_WINDOW(window), box);

    // button to box layout
    button = gtk_button_new_with_label("Hello World");
    g_signal_connect(button, "clicked", G_CALLBACK(print_hello), NULL);
    g_signal_connect_swapped(button, "clicked", G_CALLBACK(gtk_window_destroy), window);  // 关联 click 到 window destroy
    gtk_box_append(GTK_BOX(box), button);

    // 显示 window
    gtk_window_present(GTK_WINDOW(window));
}

using namespace std;

int main()
{
    GtkApplication* app;
    int status;

    app = gtk_application_new("org.gtk.example", G_APPLICATION_FLAGS_NONE);
    g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);
    status = g_application_run(G_APPLICATION(app), 0,nullptr);
    g_object_unref(app);

    return status;
}

运行后挺帅的吧:

LYJ博客


本文为3YL原创,转载无需联系,但请注明来自labisart.com。

原创文章不易,如果觉得有帮助,可打赏或点击右侧广告支持:

查看打赏记录

发表评论请遵守党国法律!后台审核后方可显示!
  • 最新评论
  • 总共0条评论
  • Blog v1.1© 2025 labisart.com 版权所有 | 联系:labartwork@163.com