在 Ubuntu 上进行 C++ 图形界面开发
一 环境准备
二 主流框架与快速上手
#include <QApplication>
#include <QPushButton>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QPushButton button("Hello, Qt!");
button.show();
return app.exec();
}
qmake -project
qmake
make
./your_project_name
#include <gtkmm.h>
class HelloWorld : public Gtk::Window {
public:
HelloWorld() {
set_title("Hello, GTKmm");
set_default_size(200, 200);
auto label = Gtk::manage(new Gtk::Label("Hello, World!"));
add(*label);
label->show();
}
};
int main(int argc, char* argv[]) {
auto app = Gtk::Application::create(argc, argv, "org.gtkmm.example");
HelloWorld window;
return app->run(window);
}
pkg-config --cflags --libs gtkmm-3.0 && ./hello_gtkmm#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Button.H>
void cb(Fl_Widget*, void*) { printf("Hello, FLTK!\n"); }
int main(int argc, char** argv) {
Fl_Window* w = new Fl_Window(300, 200, "Hello FLTK");
Fl_Button* b = new Fl_Button(100, 80, 100, 30, "Click Me");
b->callback(cb);
w->end(); w->show(argc, argv);
return Fl::run();
}
fltk-config --cxxflags --libs && ./hello_fltk#include <wx/wx.h>
class MyApp : public wxApp { bool OnInit() override {
(new wxFrame(nullptr, wxID_ANY, "Hello, wxWidgets"))->Show(true);
return true;
} };
wxIMPLEMENT_APP(MyApp);
wx-config --cxxflags -o hello_wx main.cpp wx-config --libs && ./hello_wx三 框架选型建议
四 构建与调试技巧
pkg-config --cflags --libs gtkmm-3.0、fltk-config --cxxflags --libs、wx-config --cxxflags/--libs)五 常见问题与排查