废话不多说,直接效果图先贴上:

用到的组件如下:

GtkLabel 标签(同QLabel)
GtkVBox 横向布局(同QVboxLayout)
GtkButtonBox 按钮布局盒子
GtkFream 边框修饰
GtkTable 表格布局(同QGridLayout)
GtkCheckButton 点击按钮(同QCheckBox)
GtkEntry 文本编辑行(同QLineEdit)
GtkButton

按钮(同QPushButton)

下面是源码程序(环境来自Qt5.11.2,我之前的博文提到过Qtcreator怎么配置Gtk的开发环境的)

#include <QApplication>
#include <gtk/gtk.h>
#include <QMainWindow>
#include <QLabel>
#include <QDebug>
#include <QList>typedef struct
{GtkWidget* G_lineedit;GtkWidget* G_label;
}Transmit_Ds;void clicked_OK(GtkWidget* _Sig_Instance,gpointer InstanceContainer)
{const char* p=gtk_entry_get_text((GtkEntry*)((*((Transmit_Ds*)InstanceContainer)).G_lineedit));gtk_label_set_label((GtkLabel*)((*((Transmit_Ds*)InstanceContainer)).G_label),p);
}void GTK_WidgetInitShow(int argc, char *argv[])
{gtk_init (&argc, &argv);GdkColor color1;color1.red = 0xffff;color1.green = 0x0000;color1.blue = 0x0000;GdkColor color2;color2.red = 0x0000;color2.green = 0xffff;color2.blue = 0x0000;GtkWidget *G_f1label1 = gtk_label_new("Fream1Label");//布局范围测试Label1GtkWidget *G_f1label2 = gtk_label_new("Fream2Label");//布局范围测试Label2GtkWidget *G_f1vbox = gtk_vbox_new(TRUE,2);//测试Label布局容器gtk_widget_modify_bg(G_f1label1,GTK_STATE_NORMAL, &color2);//设置G_f1label1组件颜色gtk_widget_modify_bg(G_f1label2,GTK_STATE_NORMAL, &color1);//设置G_f1label2组件颜色gtk_container_add(GTK_CONTAINER(G_f1vbox) ,G_f1label1);//纵向布局添加元素gtk_container_add(GTK_CONTAINER(G_f1vbox) ,G_f1label2);//纵向布局添加元素GtkWidget *G_frameInType = gtk_frame_new("freamIn");//边框修饰1GtkWidget *G_frameOutType = gtk_frame_new("freamOut");//边框修饰2GtkWidget *G_tabel = gtk_table_new(2,1,TRUE);//tabelLayoutGtkWidget *G_ButtonBox =gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);//按钮布局控件GtkWidget *G_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);//Widget承载界面GtkWidget *G_label = gtk_label_new("请输入内容");//输入显示labelGtkWidget *G_okbutton = gtk_button_new_with_label("Ok");//确认按钮GtkWidget *G_closebutton = gtk_button_new_with_label("Close");//取消按钮GtkWidget *G_vbox = gtk_vbox_new(TRUE,10);//纵向布局GtkWidget *G_lineedit = gtk_entry_new();//编辑文本框GtkWidget *G_checkbutton = gtk_check_button_new_with_label("check_button");//点击按钮gtk_frame_set_shadow_type(GTK_FRAME(G_frameInType),GTK_SHADOW_IN);//边框修饰下效果内部阴影gtk_frame_set_shadow_type(GTK_FRAME(G_frameOutType),GTK_SHADOW_ETCHED_OUT);//边框修饰下效果外部淡入阴影gtk_table_attach_defaults(GTK_TABLE(G_tabel),G_frameInType,0,1,0,3);//空间添加布局gtk_table_attach_defaults(GTK_TABLE(G_tabel),G_frameOutType,1,2,3,8);gtk_table_attach_defaults(GTK_TABLE(G_tabel),G_f1vbox,0,1,1,3);gtk_table_attach_defaults(GTK_TABLE(G_tabel),G_label,0,1,3,4);gtk_table_attach_defaults(GTK_TABLE(G_tabel),G_lineedit,0,1,4,5);gtk_table_attach_defaults(GTK_TABLE(G_tabel),G_checkbutton,0,1,5,6);gtk_table_attach_defaults(GTK_TABLE(G_tabel),G_ButtonBox,0,1,6,7);gtk_container_add(GTK_CONTAINER(G_ButtonBox) ,G_okbutton);//容器box布局gtk_container_add(GTK_CONTAINER(G_ButtonBox) ,G_closebutton);gtk_container_add(GTK_CONTAINER(G_vbox) ,G_tabel);//容器box布局gtk_container_add(GTK_CONTAINER(G_window) ,G_vbox);//贴到承载类上static Transmit_Ds TSDS;//参数结构体TSDS.G_label=G_label;//地址赋值TSDS.G_lineedit=G_lineedit;//地址赋值qDebug()<<TSDS.G_label<<TSDS.G_lineedit<<&TSDS;g_signal_connect(G_okbutton,"clicked",G_CALLBACK(clicked_OK),(gpointer)&TSDS);//OkbuttonClicked信号槽链接g_signal_connect(G_window, "delete_event", gtk_main_quit, NULL);//删除事件信号槽链接gtk_widget_show_all(G_window); //gtk_loop function
}int main(int argc, char *argv[])
{QApplication a(argc, argv);   //Qt-Gui入口函数GTK_WidgetInitShow(argc,argv);//GTK-GUI入口函数//    QMainWindow w;//    QLabel* label=new QLabel("this Qt Label Widget",&w);//    w.show();gtk_main();      //GTK return voidreturn a.exec(); //QT return int
}

在本文的实例中布局为如下关系:

有四个布局的控件(从外到内)分别是:

GtkVBox1和GtkVBox2同级,在源码中变量名称为(G_f1vbox、G_vbox)

在GtkVBox2(G_vbox)中存在控件GtkTable(G_tabel)

在GtkTable(G_tabel)中存在GtkButtonBox(G_ButtonBox)

GtkFream 控件只是修饰作用,并没有什么关乎任何控件的作用。

函数解析

gtk_widget_modify_bg()     //设置控件的颜色
gtk_container_add()        //设置子组件到布局容器内
gtk_frame_set_shadow_type()//设置GtkFream的边线样式
gtk_table_attach_defaults()//设置子组件到GtkTable中
g_signal_connect()         //回调槽函数绑定
clicked_OK()               //自定义槽函数

具体的函数用法可以直接百度出来。学过QtGui的读友可能学起GTK轻车熟路。

包括GTK里面尽量指针加上const和Static这种修饰符,避免程序在运行过程中自动更改。源码中槽函数传递到Clicked_OK()的参数

    static Transmit_Ds TSDS;//参数结构体TSDS.G_label=G_label;//地址赋值TSDS.G_lineedit=G_lineedit;//地址赋值qDebug()<<TSDS.G_label<<TSDS.G_lineedit<<&TSDS;

大家可以自行尝试把static去掉看看出现什么问题,我这边这个结构体的地址正确,而通过结构体地址解析里面组件的地址就会发生地址错乱,我也不太清楚这是什么问题,如果大家知道的评论一下,相互学习。

还有本人的代码写的比较烂,凑合着看吧,别骂街,手动[/滑稽]。

差点忘了一件事我的**.Pro文件:

#-------------------------------------------------
#
# Project created by QtCreator 2019-01-30T16:05:36
#
#-------------------------------------------------QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = Example3GW
TEMPLATE = app# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.DEFINES += QT_DEPRECATED_WARNINGS
#DEFINES += QT_DEPRECATED_ERRORS# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0CONFIG += c++11 no_keywordsSOURCES += \main.cppINCLUDEPATH +=\D:/msys64/mingw64/include \D:/msys64/mingw64/include/gtk-3.0 \D:/msys64/mingw64/include/glib-2.0 \D:/msys64/mingw64/lib/glib-2.0/include \D:/msys64/mingw64/include/pango-1.0 \D:/msys64/mingw64/include/cairo \D:/msys64/mingw64/include/gdk-pixbuf-2.0 \D:/msys64/mingw64/include/atk-1.0LIBS +=\-LD:/msys64/mingw64/lib \-lgtk-3 -lgdk-3 -lgdi32 \-limm32 -lshell32 -lole32 \-luuid -lwinmm -ldwmapi \-lsetupapi -lcfgmgr32   \-lz -lpangowin32-1.0    \-lpangocairo-1.0 -lpango-1.0    \-latk-1.0 -lcairo-gobject -lcairo   \-lgdk_pixbuf-2.0 -lgio-2.0  \-lgobject-2.0 -lglib-2.0 -lintl## Default rules for deployment.
#qnx: target.path = /tmp/$${TARGET}/bin
#else: unix:!android: target.path = /opt/$${TARGET}/bin
#!isEmpty(target.path): INSTALLS += target

GTK槽回调函数,组件颜色,布局控件相关推荐

  1. QT信号与槽-启动系统程序以及相关控件介绍

    1.1 创建一个继承至QWidget的项目. 1.2 设计界面,分析界面采用的布局方式. 首先,每行控件采用水平布局方式,第三行为了使控件靠右,前面添加一个占位控件. 三行采用垂直平局: 选中控件,通 ...

  2. Qt-5种布局控件详解

    实际开发中,一个界面上可能包含十几个控件,手动调整它们的位置既费时又费力.作为一款成熟的 GUI 框架,Qt 提供了很多摆放控件的辅助工具(又称布局管理器或者布局控件),它们可以完成两件事: 自动调整 ...

  3. VCL组件之编辑控件

    VCL组件之编辑控件 Note 以后将用两种方式提及组件,以组件的名称或定义组件的VCL类的名称.可以说"Label组件用于--"或说"TLabel用于--", ...

  4. python嵌套html开发gui_python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例...

    PyQt5布局控件QFormLayout简介 QFormLayout是label-field式的表单布局,顾明思议,就是实现表单方式的布局,表单是提示用户进行交互的一种模式,主要有两列组成,第一列用于 ...

  5. ESP32 开发笔记(四)LVGL控件学习 ColorPicker 颜色选择器控件

    先看效果,创建一个颜色选择器控件,设置事件回调动态显示当前选择的颜色值 开发板购买链接https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.5 ...

  6. 【愚公系列】2023年07月 WPF+上位机+工业互联 002-WPF布局控件

    文章目录 前言 一.WPF布局控件 1.无边框设计 2.理解布局 2.1 WPF的布局处理 2.1 布局原则 2.3 布局过程 3.布局控件 3.1 Grid控件 3.1.1 属性 3.1.2 案例 ...

  7. Flutter 布局控件完结篇

    本文对Flutter的29种布局控件进行了总结分类,讲解一些布局上的优化策略,以及面对具体的布局时,如何去选择控件. 1. 系列文章 Flutter 布局详解 Flutter 布局(一)- Conta ...

  8. WinForm界面开发之布局控件WeifenLuo.WinFormsUI.Docking的使用

    控件下载地址(开源) http://sourceforge.net/projects/dockpanelsuite/ 原文:http://www.cnblogs.com/wuhuacong/archi ...

  9. 分享-WinForm界面开发之布局控件WeifenLuo.WinFormsUI.Docking的使用

    分享自伍华聪的-WinForm界面开发之布局控件"WeifenLuo.WinFormsUI.Docking"的使用 本篇介绍Winform程序开发中的布局界面的设计,介绍如何在我的 ...

  10. WinForm 布局控件“WeifenLuo.WinFormsUI.Docking“的使用

    本篇介绍Winform程序开发中的布局界面的设计,介绍如何在我的共享软件中使用布局控件"WeifenLuo.WinFormsUI.Docking". 布局控件"Weife ...

最新文章

  1. FPGA中建立时间和保持时间不满足如何解决
  2. cppcheck编译安装命令
  3. numpy.exp详解
  4. 程序员必收藏的五个网站
  5. C# 系统应用之清空回收站操作
  6. Angular form 官网文档的学习笔记:Angular两种实现form的方式
  7. Docker镜像由于代理问题导致不能下载的解决办法
  8. 搭建Struts2步骤
  9. [crypto][ipsec] 简述ESP协议的sequence number机制
  10. DEDECMS使用SQL语句批量删除文章
  11. Powershell进阶学习(6) 部署 Windows PowerShell Web 访问
  12. Python-Matplotlib可视化(3)——自定义样式绘制精美统计图
  13. python mysql到处excel
  14. python海龟图画龙珠_DeepOps的Python小笔记-天池龙珠计划-Python训练营-Task 02:DAY5
  15. 超实用的PDF论文修改技巧
  16. java web程序设计任务驱动教程答案,Java Web应用程序开发任务驱动式教程
  17. java架构师之路:JAVA程序员必看的15本书
  18. 对计算机专业来说学历真的重要吗?
  19. JAVA32位的如何换成64位的_win10系统中怎么把32位改成64位教程
  20. 美团面试官:Java 性能调优你会多少?一个问题就把我问的哑口无言,哭了

热门文章

  1. Python学习笔记(5),Battleship 游戏
  2. 新型冠状病毒数据可视化分析
  3. 区块链Baas平台纳管实战
  4. c语言operator,C++操作符(Operator)用法(new和重载)
  5. 带轮轮毂长度l和带轮宽b表_V带轮宽度怎么计算?知道是A型带,带数为6,轮缘宽、轮彀孔径与长度怎么计算?顺求公式...
  6. CC2540F256RHAR
  7. 【《卓有成效的工程师》摘要\笔记】
  8. vue组件编写 组件库_一种玩具,可让您使用Vue组件编写歌曲
  9. php页面强制横屏,Css实现手机端页面强制横屏(仅适用与一屏页面)
  10. (完美解决)升级win10,提示VirtualBox 立即卸载此应用,因为它与Windows 10 不兼容