linux 国产化 gtk图形界面开发 go和c++环境搭建

linux 国产化 gtk图形界面开发 go和c++环境搭建

一.c++环境搭建

1.解决系统自带gcc无法编译gtk的问题

sudo apt-get install build-essential 

2.安装gtk和GOHOME环境

sudo apt-get install gnome-devel gnome-devel-docs

3.安装 pkg-config 工具,用于编译gtk的

 sudo apt-get install  pkg-config

4.安装gtk的gnome窗口的c/c++语言图形库

sudo apt-get install glade libglade2-dev(实际有效) 或者 
sudo apt-get install glade-gnome glade-common glade-doc
  1. 编写好gtk文件,用下列命令进行编译
sudo gcc main.cpp -o main `pkg-config --cflags --libs gtk+-2.0`

6.可能依赖裤

sudo apt-get install libgtk-3-dev libappindicator3-dev -y

7.测试,可拖动的无标题窗口

#include <gtk/gtk.h>

gboolean on_button_press(GtkWidget* widget,
  GdkEventButton * event, GdkWindowEdge edge)
{
  if (event->type == GDK_BUTTON_PRESS)
  {
    if (event->button == 1) {
      gtk_window_begin_move_drag(GTK_WINDOW(gtk_widget_get_toplevel(widget)),
          event->button,
      event->x_root,
      event->y_root,
      event->time);
    }
  }

  return FALSE;
}


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

  GtkWidget *window;

  gtk_init(&argc, &argv);

  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
  gtk_window_set_default_size(GTK_WINDOW(window), 230, 150);
  gtk_window_set_title(GTK_WINDOW(window), "Drag & drop");
  gtk_window_set_decorated(GTK_WINDOW (window), FALSE);
  gtk_widget_add_events(window, GDK_BUTTON_PRESS_MASK);

  g_signal_connect(G_OBJECT(window), "button-press-event",
      G_CALLBACK(on_button_press), NULL);

  g_signal_connect_swapped(G_OBJECT(window), "destroy",
        G_CALLBACK(gtk_main_quit), G_OBJECT(window));

  gtk_widget_show(window);

  gtk_main();

  return 0;
}

二.gtk(go)环境搭建(vscode编译器)

1.go环境搭建(略过)

2.create new main.go
3.go mod init yourproject

package main

import (
	"fmt"
	"os"

	"github.com/mattn/go-gtk/glib"
	"github.com/mattn/go-gtk/gtk"
)

func main() {
	gtk.Init(&os.Args)

	window := gtk.NewWindow(gtk.WINDOW_POPUP)
	window.SetPosition(gtk.WIN_POS_CENTER)
	window.SetTitle("GTK Go!")
	window.SetIconName("gtk-dialog-info")
	window.Connect("destroy", func(ctx *glib.CallbackContext) {
		fmt.Println("got destroy!", ctx.Data().(string))
		gtk.MainQuit()
	}, "foo")

	//--------------------------------------------------------
	// GtkVBox
	vbox := gtk.NewVBox(false, 2)

	//--------------------------------------------------------
	// button
	// button := gtk.NewButtonWithLabel("Button with label")
	// button.Clicked(func() {
	// 	fmt.Println("button clicked:", button.GetLabel())
	// })
	// vbox.Add(button)

	//--------------------------------------------------------
	window.Add(vbox)
	window.SetSizeRequest(242, 140)

	
	window.ShowAll()
	gtk.Main()
}

4.go mod tidy(下载安转依赖库,太慢则切换go镜像 阿里云镜像)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值