2016-12-27 3 views
0

У моего проекта есть время выполнения. Я покажу это с помощью нижеприведенного кода:Как вставить индикатор выполнения для отображения времени выполнения проекта?

#include <opencv2/opencv.hpp> 
#include <gtk/gtk.h> 
#include <time.h> 

using namespace cv; 
using namespace std; 

gboolean Func (gpointer data) { 
    gdouble value; 
    GString *text; 

    //part of code that generate run time 
    clock_t start, end; 
    start = clock(); 

    Mat image, src1, DENO; 
    image = imread("C:/Users/Alireza/Desktop/1.png"); 
    cvtColor(image, src1, CV_RGB2GRAY); 
    fastNlMeansDenoising(src1, DENO, 19, 29, 38); 
    imwrite("DENO.png", DENO); 

    end = clock(); 
    int runtime = ((int)(end - start))/CLOCKS_PER_SEC; 
    cout << "Time1 = " << runtime << "s" << endl; 


    //part of code that I want to show run time progress by progress bar 
    value = gtk_progress_bar_get_fraction(GTK_PROGRESS_BAR(data)); 

    value += 0.01; 
    if (value > 1.0) { 
     value = 0.0; 
    } 

    text = g_string_new(gtk_progress_bar_get_text(GTK_PROGRESS_BAR(data))); 
    g_string_sprintf(text, "%d%%", (int)(value * 100)); 
    gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(data), value); 
    gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(data), TRUE); 
    gtk_progress_bar_set_text(GTK_PROGRESS_BAR(data), text->str); 

    while (gtk_events_pending()) 
     gtk_main_iteration(); 

    return TRUE; 
} 

int main(int argc, char *argv[]) 
{ 
GtkWidget *window; 
GtkWidget *progressBar; 
gint timer; 

gtk_init(&argc, &argv); 

window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 
gtk_window_set_title(GTK_WINDOW(window), "GtkProgressBar"); 
gtk_window_set_default_size(GTK_WINDOW(window), 300, 30); 

progressBar = gtk_progress_bar_new(); 
timer = g_timeout_add(100, Func, progressBar); 

gtk_container_add(GTK_CONTAINER(window), progressBar); 

gtk_widget_show_all(window); 

gtk_main(); 

return 0; 

} 

Я хочу показать прогресс моего проекта, используя индикатор прогресса. Изображение:

1.png

Но я не могу объединить эти коды вместе, чтобы показать прогресс во время выполнения моего проекта. Я новичок в gtk3. Есть ли у кого-нибудь какие-либо мысли или предложения по этому поводу?

ответ

1

Я думаю, что есть несколько других проблем в вашей программе. О панели прогресса:

При вызове gtk_progress_bar_set_fraction вы действительно обновляете индикатор выполнения, но вы не даете Gtk время для рисования обновленной строки. (Кроме того, вызов gtk_progress_bar_set_fraction должен быть внутри цикла for)

Итак, чтобы Gtk мог это сделать (а также следить за другими событиями, такими как щелчки и клавиатура), вам нужно вызвать функцию который позволяет основному циклу Gtk отслеживать ожидающие запросы.

Посмотрите на функции gtk_main_iteration, gtk_main_iteration_do. Вы должны включить один из них в свой математический цикл.

+0

@ jcoppens: Большое вам спасибо за ваш путеводитель. Я обновляю свой код. Но я хочу показать прогресс выполнения во время выполнения. Например, в моем коде у меня есть часть, которая генерирует время выполнения (связанное с обработкой изображений с помощью OpenCV). Для времени выполнения изображения 5 секунд. Я хочу показать 5-секундный прогресс по индикатору выполнения (любой из 1 секунды, равной 20%) одновременности. Если это возможно, пожалуйста, помогите мне изменить мой код –

+0

Любые тела не помогают мне ?? –

Смежные вопросы