Как я могу синхронизировать gtk :: label с созданием или подавлением файла в каталоге?

У меня есть программа, которая перечисляет все файлы в рабочем каталоге (я использую glib для этого), затем я проверяю этот список в GtkWindow через Gtk::Label, Я экранирую окно с помощью run(),

  Glib::RefPtr<Gtk::Application> app = Gtk::Application::create(argc, argv, "Zombie-Shadowchaser SixSixSix");
app->run(*pMainWindow);

Я знаю, как поменять этикетку на set_label() Я могу синхронизировать список файлов в каталоге со списком, отображаемым одним нажатием кнопки. Поэтому, если я удаляю или создаю файл, он удаляет или добавляет к ярлыку файл. Но как сделать так, чтобы моя программа синхронизировалась каждую секунду, не нажимая кнопку?

0

Решение

здесь полный пример, также хорошо учиться, если вы хотите понять, как использовать g_signal_connect()

#include <gtkmm.h>

Gtk::Label *plabel; // because I"m lazzy...

/**
** everytime a file is created in the current directory, toCallbackFunction()
** will be called. The paramaters are the same of signal see signal here :
** http://www.freedesktop.org/software/gstreamer-sdk/data/docs/latest/gio/GFileMonitor.html#GFileMonitor-changed
**/
void
toCallbackFunction(GFileMonitor      *monitor
,GFile             *file
,GFile             *other_file
,GFileMonitorEvent event_type
,gpointer          user_data
)
{
plabel->set_label( g_file_get_path(file) );
}int
main(int  argc
,char *argv[]
)
{
Glib::RefPtr<Gtk::Application> app = Gtk::Application::create(argc, argv, "org.gtkmm.examples.base");
Gtk::Window window;
Gtk::Label label;
window.set_default_size(800, 200);

label.set_label("test");

window.add(label);
label.show();
plabel = &label;

/*
* g_file_monitor() requires a file, not a path. So we use g_file_new_for_path()
* to convert the directory (this is for demonstration)
*/
GFile *file = g_file_new_for_path(".");
GFileMonitor *monitor;
/*
* http://www.freedesktop.org/software/gstreamer-sdk/data/docs/latest/gio/GFile.html#g-file-monitor
*/
monitor = g_file_monitor_directory(file, G_FILE_MONITOR_NONE, nullptr, nullptr);
/*
* the next line, is how to connect the monitor to a callback function when
* the signal changed has been triggered.
*/
g_signal_connect(monitor, "changed", G_CALLBACK (toCallbackFunction), nullptr);return app->run(window);
}

скомпилировать на Linux:

 g++ main.cc -o simple `pkg-config gtkmm-3.0 --cflags --libs` -std=c++11

для пользователей MS Windows я не расист, но я не знаю, как компилировать в Windows. Любой комментарий будет признателен, я сделал этот кусок кода самостоятельно. Спасибо сообщить о любой ошибке.

Как это использовать :

Когда вы запустите программу, перейдите с вашей консоли в тот же каталог и создайте новый файл, например,

 $ echo "stack" > overflow

вы должны получить что-то вроде:

введите описание изображения здесь

Спасибо nemequ

1

Другие решения


По вопросам рекламы [email protected]