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 

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镜像 阿里云镜像)

你可能感兴趣的:(linux,golang,c++)