Linux C++ 图形界面开发指南
一 常用框架与选型建议
二 环境搭建与工具链
sudo apt-get install build-essential qtbase5-dev qtcreatorsudo apt-get install libgtk-3-devsudo apt-get install libgtkmm-3.0-devsudo apt-get install libfltk1.3-devsudo apt-get install libwxgtk3.0-devsudo yum groupinstall "Development Tools"sudo yum install gtk3-develsudo yum install qt5-qtbase-develsudo yum install fltk-devel三 快速上手示例
sudo apt-get install build-essential qtbase5-dev qtcreator#include <QApplication>
#include <QPushButton>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QPushButton btn("Hello, Qt!");
btn.show();
return app.exec();
}
g++ -o myapp main.cpp $(pkg-config --cflags --libs Qt5Widgets) && ./myappsudo apt-get install libgtk-3-dev#include <gtk/gtk.h>
static void activate(GtkApplication* app, gpointer user_data) {
GtkWidget *win = gtk_application_window_new(app);
gtk_window_set_title(GTK_WINDOW(win), "Hello, GTK+");
gtk_window_set_default_size(GTK_WINDOW(win), 200, 200);
gtk_widget_show_all(win);
}
int main(int argc, char **argv) {
GtkApplication *app = gtk_application_new("org.gtk.example", G_APPLICATION_FLAGS_NONE);
g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);
int status = g_application_run(G_APPLICATION(app), argc, argv);
g_object_unref(app);
return status;
}
g++ $(pkg-config --cflags gtk+-3.0) -o gtk_app main.c $(pkg-config --libs gtk+-3.0) && ./gtk_appsudo apt-get install libfltk1.3-dev#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Button.H>
void cb(Fl_Widget*, void*) { fl_message("Button clicked!"); }
int main() {
Fl_Window win(300,200,"Hello, FLTK");
Fl_Button btn(100,80,100,40,"Click Me");
btn.callback(cb);
win.end(); win.show();
return Fl::run();
}
g++ -o fltk_app main.cpp -lfltk && ./fltk_apppkg-config --cflags --libs gtkmm-3.0 获取编译参数。四 构建系统与项目结构
qmake -projectqmakemake && ./your_appcmake_minimum_required(VERSION 3.16)
project(HelloQt LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
find_package(Qt5 COMPONENTS Widgets REQUIRED)
add_executable(hello main.cpp)
target_link_libraries(hello Qt5::Widgets)
五 进阶与最佳实践
configure_file 或自定义脚本。-Wall -Wextra)与静态分析。