Created
August 11, 2024 04:48
-
-
Save Mufanc/19a171276c430c483b7cf61835c0db5f to your computer and use it in GitHub Desktop.
在 GTK 窗口中嵌入 QT 控件
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <QApplication> | |
#include <QWidget> | |
#include <QLabel> | |
#include <QVBoxLayout> | |
#include <QWindow> | |
#include <QTimer> | |
#include <QPushButton> | |
#ifdef signals | |
#define SIGNALS_BACKUP signals | |
#undef signals | |
#endif | |
#include <gtk/gtk.h> | |
#include <gtk/gtkx.h> | |
#ifdef SAVE_SIGNALS | |
#define signals SIGNALS_BACKUP | |
#undef SIGNALS_BACKUP | |
#endif | |
// clang++ -o demo demo.cpp $(pkg-config --cflags --libs Qt5Widgets) $(pkg-config --cflags --libs gtk+-3.0) | |
int main() { | |
int argc = 0; | |
char **argv = { nullptr }; | |
// initialize | |
gtk_init(&argc, &argv); | |
QApplication app(argc, argv); | |
GtkWidget *gwin = gtk_window_new(GTK_WINDOW_TOPLEVEL); | |
gtk_window_set_title(GTK_WINDOW(gwin), "GTK"); | |
g_signal_connect(G_OBJECT(gwin), "destroy", G_CALLBACK(gtk_main_quit), nullptr); | |
// create gtk socket | |
GtkWidget *socket = gtk_socket_new(); | |
gtk_widget_show(socket); | |
gtk_container_add(GTK_CONTAINER(gwin), socket); | |
gtk_widget_realize(socket); | |
// create QWidget | |
QWidget *container = new QWidget(); | |
QVBoxLayout *layout = new QVBoxLayout; | |
QPushButton *button = new QPushButton("This is a Qt5 button"); | |
layout->addWidget(button); | |
container->setLayout(layout); | |
// embed into gtk window | |
gtk_socket_add_id(GTK_SOCKET(socket), container->winId()); | |
container->show(); | |
// display | |
gtk_widget_show(gwin); | |
gtk_main(); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment