创建主函数和用户界面元素
现在,让我们创建main
函数并设置用户界面。
int main(int argc, char *argv[]) {
GtkWidget *window;
GtkWidget *grid;
GtkWidget *start_stop_button;
GtkWidget *reset_button;
gtk_init(&argc, &argv); // 初始化GTK
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "Stopwatch"); // 设置窗口标题
gtk_window_set_default_size(GTK_WINDOW(window), 200, 200); // 设置默认窗口大小
g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL); // 连接窗口关闭事件
grid = gtk_grid_new(); // 创建一个网格布局
gtk_container_add(GTK_CONTAINER(window), grid); // 将网格添加到窗口
label = gtk_label_new("00:00"); // 创建一个最初显示“00:00”的GTK标签
gtk_widget_set_hexpand(label, TRUE); // 允许标签水平扩展
gtk_widget_set_vexpand(label, TRUE); // 允许标签垂直扩展
gtk_grid_attach(GTK_GRID(grid), label, 0, 0, 1, 1); // 将标签添加到网格
start_stop_button = gtk_button_new_with_label("Start"); // 创建一个标签为“Start”的按钮
gtk_widget_set_hexpand(start_stop_button, TRUE); // 允许按钮水平扩展
gtk_widget_set_vexpand(start_stop_button, TRUE); // 允许按钮垂直扩展
g_signal_connect(G_OBJECT(start_stop_button), "clicked", G_CALLBACK(start_stop_button_clicked), NULL); // 连接按钮点击事件
gtk_grid_attach(GTK_GRID(grid), start_stop_button, 0, 1, 1, 1); // 将按钮添加到网格
reset_button = gtk_button_new_with_label("Reset"); // 创建一个标签为“Reset”的按钮
gtk_widget_set_hexpand(reset_button, TRUE); // 允许按钮水平扩展
gtk_widget_set_vexpand(reset_button, TRUE); // 允许按钮垂直扩展
g_signal_connect(G_OBJECT(reset_button), "clicked", G_CALLBACK(reset_button_clicked), NULL); // 连接按钮点击事件
gtk_grid_attach(GTK_GRID(grid), reset_button, 0, 2, 1, 1); // 将按钮添加到网格
gtk_widget_show_all(window); // 显示窗口及其所有子部件
timer_id = g_timeout_add(1000, timer_callback, NULL); // 创建一个每1000毫秒(1秒)触发一次并调用timer_callback的定时器
gtk_main(); // 启动GTK主事件循环
return 0;
}
main
函数设置GTK窗口、标签、按钮及其点击事件处理程序。