qt widget 嵌套与弹出_Gtk widget 与 Qt Widget的相互嵌套
簡述
gtk qt窗口的相互嵌套。主要是使用了Gtk中的socket跟plug的模式,與Qt中的QX11EmbedContainer。這是兩個不同的UI庫的相互嵌套的方法。google了下發(fā)現(xiàn)有個老哥寫出來了,但是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;
}
(長按關(guān)注)
總結(jié)
以上是生活随笔為你收集整理的qt widget 嵌套与弹出_Gtk widget 与 Qt Widget的相互嵌套的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 侠客风云传单机兑换码怎么用
- 下一篇: 德国壁挂炉三大品牌是什么(现在德国的综合