Проблема с открытием нового окна в GTK3C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Проблема с открытием нового окна в GTK3

Сообщение Anonymous »

У меня есть проблема с GTK3. В главном окне моего приложения я могу нажать кнопку, которая открывает второе окно. Если я закрыл ее, используя кнопку «Отмена», все в порядке, но если я использую крест в правом верхнем углу окна, возникает проблема. Когда я хочу снова открыть это окно, оно открывается без контента (пустое окно). Как я могу это исправить? Я проектирую свои окна в Glade. Я прикрепил образец кода, я не знаю решение. .png "/>

#include
#include
#include
#include

struct Task {
std::string name;
std::string priority;
std::string added_date;
std::string deadline;
};

std::vector tasks;
GtkListStore *list_store;
GtkWidget *treeview;
GtkWidget *entry_new_task;
GtkWidget *add_task_window;
GtkWidget *add_task_button;
GtkWidget *cancel_button;
GtkWidget *add_combo_box_priorytet;
GtkWidget *add_deadline;

// Funkcja aktualizująca widok tabeli
void refresh_task_list();

// Funkcja deklarująca sortowanie po kliknięciu nagłówków
void on_column_clicked(GtkTreeViewColumn *column, gpointer user_data);

void on_open_add_task_window(GtkButton *button, gpointer user_data) {
gtk_widget_show(add_task_window);
}

void on_cancel_add_task_window(GtkButton *button, gpointer user_data) {
gtk_widget_hide(add_task_window); // Hide the task addition window
}

void setup_combo_box() {
GtkListStore *store = gtk_list_store_new(1, G_TYPE_STRING);

// Dodawanie opcji priorytetu
GtkTreeIter iter;
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter, 0, "Wysoki", -1);
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter, 0, "Średni", -1);
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter, 0, "Niski", -1);

gtk_combo_box_set_model(GTK_COMBO_BOX(add_combo_box_priorytet), GTK_TREE_MODEL(store));
gtk_combo_box_set_active(GTK_COMBO_BOX(add_combo_box_priorytet), 0);

// Zwolnienie pamięci po modelu
g_object_unref(store);
gtk_widget_show_all(add_combo_box_priorytet);
}

void on_add_task_confirm_clicked(GtkButton *button, gpointer user_data) {
const char *task_name = gtk_entry_get_text(GTK_ENTRY(entry_new_task));
if (!task_name || *task_name == '\0') {
return;
}

}
}

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

tasks.push_back({"Zadanie 1", "Wysoki", "2025-02-02", "2025-02-05"});
tasks.push_back({"Zadanie 2", "Średni", "2025-02-01", "2025-02-10"});
tasks.push_back({"Zadanie 3", "Niski", "2025-02-02", "2025-02-07"});

GtkBuilder *builder = gtk_builder_new();
gtk_builder_add_from_file(builder, "main_window.glade", NULL);
gtk_builder_add_from_file(builder, "add_window.glade", NULL);

GtkWidget *window = GTK_WIDGET(gtk_builder_get_object(builder, "main_window"));
treeview = GTK_WIDGET(gtk_builder_get_object(builder, "treeview"));
entry_new_task = GTK_WIDGET(gtk_builder_get_object(builder, "add_new_task_input"));
add_combo_box_priorytet = GTK_WIDGET(gtk_builder_get_object(builder, "add_combo_box_priorytet"));
add_deadline = GTK_WIDGET(gtk_builder_get_object(builder, "add_deadline"));

add_task_window = GTK_WIDGET(gtk_builder_get_object(builder, "add_task_window"));
add_task_button = GTK_WIDGET(gtk_builder_get_object(builder, "add_new_task_btn"));
cancel_button = GTK_WIDGET(gtk_builder_get_object(builder, "cancel_new_task"));

GtkWidget *btn_add_task = GTK_WIDGET(gtk_builder_get_object(builder, "add_task"));
GtkWidget *btn_remove_task = GTK_WIDGET(gtk_builder_get_object(builder, "del_task"));
GtkWidget *btn_save = GTK_WIDGET(gtk_builder_get_object(builder, "write_list"));
GtkWidget *btn_load = GTK_WIDGET(gtk_builder_get_object(builder, "open_list"));

g_signal_connect(btn_add_task, "clicked", G_CALLBACK(on_open_add_task_window), NULL);
g_signal_connect(add_task_button, "clicked", G_CALLBACK(on_add_task_confirm_clicked), NULL);
g_signal_connect(cancel_button, "clicked", G_CALLBACK(on_cancel_add_task_window), NULL);
g_signal_connect(btn_remove_task, "clicked", G_CALLBACK(on_remove_task_clicked), NULL);
g_signal_connect(btn_save, "clicked", G_CALLBACK(on_save_tasks_to_file), NULL);
g_signal_connect(btn_load, "clicked", G_CALLBACK(on_load_tasks_from_file), NULL);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
g_signal_connect(window,"destroy", G_CALLBACK(on_cancel_add_task_window),NULL);
setup_combo_box();
setup_treeview();

refresh_task_list();
gtk_widget_show(window);

gtk_main();
return 0;
}


Подробнее здесь: https://stackoverflow.com/questions/794 ... ow-in-gtk3
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»