简述

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的相互嵌套相关推荐

  1. VS中开发Qt程序,控制台不弹出

    VS中开发Qt,控制台不弹出 用VS开发Qt应用程序的时候,使用std::cout发现控制台不弹出, 解决方案: 工程->属性->配置属性->链接器->系统->子系统中将 ...

  2. qt中颜色对话框弹出时应用程序输出栏出现QWindowsWindow::setGeometry: Unable to set geometry 180x30+345+311 (frame: 202x8

    引言 在项目中点击按钮,弹出颜色选择对话框,但同时应用程序会在应用程序输出一栏中显示 QWindowsWindow::setGeometry: Unable to set geometry 180x3 ...

  3. python qt5 增加文本框_Python用PyQt5制作弹出式输入框,Qt图形界面编程之QInputDialog...

    前面内容,我们介绍了PyQt5的一些常用基本控件. 温故而知新 计数器QSpinBox使用详解,Python用PyQt5制作图形界面基础控件篇 Python用PyQt5实现多种弹出消息框,QMessa ...

  4. qt中颜色对话框弹出时应用程序输出栏出现setGeometry: Unable to set geometry 152x30+682+300 on QWidgetWindow/‘QColorDialo

    前言 在项目中点击按钮,弹出颜色选择对话框,但同时应用程序会在应用程序输出一栏中显示. setGeometry: Unable to set geometry 152x30+682+300 on QW ...

  5. 诡异的QT脱离主界面弹出之前删除的UI子部件问题

    Qtableview 在重新渲染后点击下一页弹出独立窗口 用了独立的dbpage做分页,里面内置了多线程来获取总页数等信息. 当输入新的页面大小时,又新建了一个dbpage分页对象.这个时候问题就出来 ...

  6. el-table动态渲染表格列el-table-column且里边嵌套el-popover弹出框语法

    总结下表格中每列的动态渲染实现语法:vue + element <el-table><template v-if="columns.length > 0"& ...

  7. Qt 如何新建一个弹出式窗口

    在QT原有工程处右键 ​点击添加新文件 CSDN QT开发文章推荐:Qt开发必备技术栈学习路线和资料 ​选择QT-QT界面设计师(有的版本可能叫QT GUI) ​新建好的文件列表如下,我添加的的新窗口 ...

  8. 【Qt】弹出子窗口时禁用主窗口

    子窗口名:userManagerDialog Qt::WindowFlags flags = Qt::Dialog;userManagerDialog->setWindowFlags(flags ...

  9. 利用Layer组件弹出多个对话框(非嵌套)与关闭及刷新

    页面A中弹出页面B,在页面B中弹出页面C,在layer做嵌套ifframe弹出时会遇到C页面被嵌套在B页面中,如果C尺寸大于B,则C将不能显示完整.这个时候可以考虑B,C页面均由A页面弹出从而避免嵌套 ...

最新文章

  1. Python自然语言处理学习笔记(66):7.7 小结
  2. STM32F4 编程手册学习1_编程模型
  3. C++中extern关键字使用 http://blog.csdn.net/sruru/article/details/7951019
  4. 全面的GC原理及调优
  5. [学习] FPGA之基本原理(可能理解不对)
  6. 第七十期:IT技术人员的自我修养
  7. ps导出gif颜色不对_PS基础知识(1)
  8. Windows学习总结(18)——Windows运行命令与Win键+快捷键再总结
  9. 谈谈自己对正则化的一些理解
  10. Listener监听器已经Listener的小案例
  11. Rust手机端皮肤搜索、生成Rust专属名片、转盘概率模拟
  12. 为什么Audition CC2017扫描不了电音插件,你需要这个工具
  13. Python数据分析 笔记4(matplotlib库)
  14. 《 阿房宫赋》古文鉴赏
  15. Uninstalltool-专业卸载工具
  16. 高等工程数学 —— 第四章 (1)线性方程组的直接解法与广义逆矩阵求解矛盾方程组
  17. AT24C1024读写
  18. 【使用教程】VSCode创建json文件
  19. Typora插入图片的合理保存【windows平台】
  20. 可视化 | Python精美动态水球图

热门文章

  1. 来,看看这20个常用的宏定义!
  2. 电子工程师,学会阅读Datasheet很重要!
  3. 关于利用IBERT核对GTX收发器板级测试的原理与过程详解
  4. python executescript_在selenium中一些相对常用的JavaScript事件
  5. python 文本框_重置Python中的文本框
  6. python转嵌入式c_在C嵌入式python中刷新导入
  7. python安装不上怎么办_python安装不了怎么办
  8. leetcode 1038. 从二叉搜索树到更大和树
  9. Django的自带认证系统——auth模块
  10. 如何让博客变得稍稍好看