Вот программа:
#include <gtk/gtk.h>
#include "2.h"
#include <glib.h>
// writing a text file
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
string GetStdoutFromCommand(string cmd) {
string data;
FILE * stream;
const int max_buffer = 256;
char buffer[max_buffer];
cmd.append(" 2>&1");
stream = popen(cmd.c_str(), "r");
if (stream) {
while (!feof(stream))
if (fgets(buffer, max_buffer, stream) != NULL) data.append(buffer);
pclose(stream);
}
return data;
}
static void
app_activate (GApplication *app, gpointer user_data) {
GtkWidget *win;
GtkWidget *box;
GtkWidget *label;
GtkWidget *grid;
GtkWidget *textview = gtk_text_view_new();
// app is new
win = gtk_application_window_new (GTK_APPLICATION (app));
gtk_window_set_title (GTK_WINDOW (win), "win");
gtk_window_set_default_size (GTK_WINDOW (win), 700, 300);
// setup box1
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
gtk_box_set_homogeneous (GTK_BOX (box), TRUE);
gtk_widget_set_halign (box, GTK_ALIGN_START);
gtk_widget_set_valign (box, GTK_ALIGN_START);
gtk_window_set_child (GTK_WINDOW (win), box);
// setup labels
label = gtk_label_new(GetStdoutFromCommand("netstat -tuwapn").c_str());
//GetStdoutFromCommand("netstat -tuwapn").c_str()
// grid
grid = gtk_grid_new ();
gtk_grid_set_row_spacing (GTK_GRID (grid), 1);
gtk_window_set_child (GTK_WINDOW (win), grid);
gtk_grid_attach (GTK_GRID (grid), label,200, 3, 50, 50);
// show window
gtk_widget_show (win);
}
int main (int argc, char **argv) {
GtkApplication *app;
int stat;
app = gtk_application_new ("gtk.org", G_APPLICATION_FLAGS_NONE);
g_signal_connect (app, "activate", G_CALLBACK (app_activate), NULL);
stat =g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);
return stat;
}
https://ibb.co/5Fb7Thd - это монитор интернет-соединений.
Компилируется эта программа, следующей командой:
g++ -o test test.cpp $(pkg-config --cflags --libs gtk4)
Но он статический. Как на c++ linux делается динамическое обновление этого widget’a label (текстовое поле), чтобы текст в нем менялся, каждые 5 секунд? через сигналы как на qt? через дополнительной демон на c++ в linux по cron’у? Как лучше сделать динамическое обновление label (widget) на gtk4 linux?