Bonjour,
Je suis sur Ubuntu 21.04
J’apprends c++ et gtkmm 3.0
Actuellement dans un Gtk::Entry je cherche à formater les nombres de la façon suivante :
1 234 567 890,12
Avec arrondi à 2 décimales.
Je sais le faire dans un std::cout
Mais je n’arrive pas à trouver comment le faire dans une fenêtre.
Pour le moment mes recherches m’ont amener à tenter d’utiliser set_attributes
, doc par là Gtk::Entry::set_attributes
ici aussi Pango::AttrList et même par là Language Identifiers (RFC 3066)
Mais je ne comprends pas comment me servir de set_attributes
et ne sais si c’est la bonne solution.
J’ai fait ce petit programme pour tester tout ça
#include <gtkmm-3.0/gtkmm/application.h>
#include <gtkmm/main.h>
#include <iostream>
#include <gtkmm-3.0/gtkmm/window.h>
#include <gtkmm-3.0/gtkmm/box.h>
#include <gtkmm-3.0/gtkmm/label.h>
#include <gtkmm-3.0/gtkmm/entry.h>
#include <gtkmm-3.0/gtkmm/button.h>
#include <locale>
#include <iomanip>
#include <string>
std::string result(std::string const &entry);
void efface(Gtk::Entry &a, Gtk::Entry &b);
void stop(Gtk::Window &fenetre);
int main(int argc, char *argv [])
{
auto app = Gtk::Application::create(argc, argv);
Gtk::Window fenetre;
Gtk::Button resultat{"Résultat"}, clear("Effacer"), quitter("Quitter");
Gtk::Entry entry1, entry2;
Gtk::VBox vbox1;
Gtk::Label label1{"label1"}, label2{"label2"};
fenetre.set_title("Test Pango");
fenetre.set_default_size(300, 200);
fenetre.set_border_width(10);
fenetre.set_position(Gtk::WIN_POS_CENTER);
entry1.grab_focus();
vbox1.pack_start(label1);
vbox1.pack_start(entry1);
vbox1.pack_start(label2);
vbox1.pack_start(entry2);
vbox1.pack_start(resultat);
vbox1.pack_start(clear);
vbox1.pack_end(quitter);
fenetre.add(vbox1);
fenetre.show_all();
resultat.signal_clicked().connect([&]()->void {entry2.set_text(result(entry1.get_text()));});
// quitter.signal_clicked().connect([]() { Gtk::Main::quit(); }); Erreur de segmentation (core dumped) pourquoi ?
clear.signal_clicked().connect([&]()-> void {efface(entry1, entry2);});
quitter.signal_clicked().connect([&]()->void {stop(fenetre);});
return app->run(fenetre);
}
std::string result(std::string const &entry)
{
std::cout.imbue(std::locale("fr_FR.UTF-8"));
std::cout << std::setiosflags(std::ios::fixed) << std::setprecision(2);
std::cout << "entry2 = " << std::stod(entry) << std::endl;
return entry;
}
void efface(Gtk::Entry &a, Gtk::Entry &b)
{
a.set_text("");
b.set_text("");
a.grab_focus();
}
void stop(Gtk::Window &fenetre)
{
fenetre.hide();
}
Une idée de comment procéder ? où me diriger vers une doc.
+0
-0