У меня есть проблема с 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
Проблема с открытием нового окна в GTK3 ⇐ C++
Программы на C++. Форум разработчиков
1739196256
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;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79425610/problem-with-opening-the-new-window-in-gtk3[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия