gtkmm – exemple 11

Cet article fait parti d’un ensemble d’exemples et d’articles sur gtkmm consultables ici. Cet exemple montre comment créer un timer et exploiter le signal émis:

capture

Téléchargement


Code source


main.cpp

#include 
#include 

int main(int argc, char* argv[])
{
	// Initialize gtkmm
	Gtk::Main app(argc, argv);
	// Create the window
	mainwindow w;
	// Start main loop
	Gtk::Main::run(w);
	return 0;
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include 
#include 
#include 


// The class mainwindow inherits from Gtk::Window
class mainwindow : public Gtk::Window
{
	// Constructor and destructor
public:    
	mainwindow();
	virtual                 ~mainwindow();
	
protected:
	// Called every timeout
	bool                    on_my_timeout();
	
	//Member widgets:
	Gtk::Label              label;
	Gtk::Button             buttonQuit;
	Gtk::Grid               mainGrid;
	
private:
	int                     seconds;
	
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include 


// Constructor of the main Window (build ui interface).
mainwindow::mainwindow()
{
	// Initialize seconds
	seconds=0;
	
	// Add the label displaying the ellapsed tim
	label.set_text("Elapsed time: 0 s");
	mainGrid.attach(label,0,0,1,1);
	
	// Add the Quit button
	buttonQuit.add_label("Quit");
	buttonQuit.set_size_request(200,50);
	buttonQuit.signal_pressed().connect(sigc::mem_fun(*this,&mainwindow::close));
	mainGrid.attach(buttonQuit,0,1,1,1);
	
	// Display the main grid in the main window
	mainGrid.show_all();
	
	// Launch timer every second
	Glib::signal_timeout().connect( sigc::mem_fun(*this, &mainwindow::on_my_timeout), 1000 );
	
	// Insert the grid in the main window
	add(mainGrid);
}


// Destructor of the class
mainwindow::~mainwindow()
{}


bool mainwindow::on_my_timeout()
{
	// Prepare message
	char Text[50];
	sprintf (Text,"Elapsed time: %d s",++seconds);
	// Display message in the label
	label.set_text(Text);
	return true;
}

Une réflexion au sujet de « gtkmm – exemple 11 »

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *