日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的相互嵌套的全部內容,希望文章能夠幫你解決所遇到的問題。

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