日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

qt widget 嵌套与弹出_Gtk widget 与 Qt Widget的相互嵌套

發布時間:2023/12/15 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 qt widget 嵌套与弹出_Gtk widget 与 Qt Widget的相互嵌套 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡述

gtk qt窗口的相互嵌套。主要是使用了Gtk中的socket跟plug的模式,與Qt中的QX11EmbedContainer。這是兩個不同的UI庫的相互嵌套的方法。google了下發現有個老哥寫出來了,但是gtk嵌入到Qt的代碼中是有點問題的,所以我改了改他的代碼。最后終于完成了,畢竟我對gtk不太熟悉=。=代碼很簡單,這里就不做任何說明了。

代碼

pro文件中添加

unix: CONFIG += link_pkgconfig

unix: PKGCONFIG += gtk+-2.0

代碼

#include

#include <QApplication>

#include <QMainWindow>

#include <QPushButton>

#include <QX11EmbedContainer>

#include <QX11EmbedWidget>

#include

#define MAINWINDOW_IS_QT true

#define EMBEDDED_IS_QT false

void create_qt_embed(long id)

{

QX11EmbedWidget* plug = new QX11EmbedWidget;

plug->embedInto(id);

QPushButton* button = new QPushButton("My Label", plug);

plug->show();

}

void create_gtk_plug(long id)

{

// GtkWidget* plug = gtk_plug_new(id);

// gtk_widget_show(plug);

// GtkWidget* button = gtk_button_new_with_label("My Label");

// gtk_widget_show(button);

// GDK_WINDOW_XID(button);

// gdk_x11_window_get_xid()

// gtk_container_add(GTK_CONTAINER(plug), button);

}

int main(int argc, char* argv[])

{

gtk_init(&argc, &argv);

QApplication app(argc, argv);

if (MAINWINDOW_IS_QT)

{

QMainWindow* main_window = new QMainWindow;

QX11EmbedContainer* container = new QX11EmbedContainer;

main_window->setCentralWidget(container);

container->setStyleSheet("background-color:red;");

if (EMBEDDED_IS_QT)

{

create_qt_embed(container->winId());

}

else

{

// gtk_widget_get_window(GTK_WIDGET(button));

GtkWidget* window;

GtkWidget* button;

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

button = gtk_button_new ();

gtk_widget_show (button);

gtk_container_add (GTK_CONTAINER (window), button);

gtk_widget_show(window);

XID id = GDK_WINDOW_XWINDOW (GTK_WIDGET(window)->window);

container->embedClient(id);

}

main_window->show();

QApplication::exec();

} else

{

GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

g_signal_connect(G_OBJECT(window), "destroy",

G_CALLBACK(gtk_main_quit), NULL);

gtk_widget_show(window);

GtkWidget* container = gtk_socket_new();

gtk_widget_show(container);

gtk_container_add(GTK_CONTAINER(window), container);

if (EMBEDDED_IS_QT)

{

create_qt_embed(gtk_socket_get_id(GTK_SOCKET(container)));

} else

{

create_gtk_plug(gtk_socket_get_id(GTK_SOCKET(container)));

}

gtk_main();

}

return 0;

}

(長按關注)

總結

以上是生活随笔為你收集整理的qt widget 嵌套与弹出_Gtk widget 与 Qt Widget的相互嵌套的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。