AboutDialog no modal
La clase AboutDialog ofrece una manera sencilla de mostrar información sobre el programa, como su logo, nombre, copyright, página web y licencia.
Most dialogs in this chapter are modal, that is, they freeze the rest of the application while they are shown. It's also possible to create a non-modal dialog, which does not freeze other windows in the application. The following example shows a non-modal AboutDialog. This is perhaps not the kind of dialog you would normally make non-modal, but non-modal dialogs can be useful in other cases. E.g. gedit's search-and-replace dialog is non-modal.
- 15.5.1. Ejemplo
15.5.1. Ejemplo
File: examplewindow.h (For use with gtkmm 4)
#ifndef GTKMM_EXAMPLEWINDOW_H #define GTKMM_EXAMPLEWINDOW_H #include <gtkmm.h> class ExampleWindow : public Gtk::Window { public: ExampleWindow(); virtual ~ExampleWindow(); protected: //Signal handlers: void on_button_clicked(); //Child widgets: Gtk::Box m_VBox; Gtk::Label m_Label; Gtk::Box m_ButtonBox; Gtk::Button m_Button; Gtk::AboutDialog m_Dialog; }; #endif //GTKMM_EXAMPLEWINDOW_H
File: main.cc (For use with gtkmm 4)
#include "examplewindow.h" #include <gtkmm/application.h> int main(int argc, char *argv[]) { auto app = Gtk::Application::create("org.gtkmm.example"); //Shows the window and returns when it is closed. return app->make_window_and_run<ExampleWindow>(argc, argv); }
File: examplewindow.cc (For use with gtkmm 4)
#include "examplewindow.h" #include <iostream> ExampleWindow::ExampleWindow() : m_VBox(Gtk::Orientation::VERTICAL), m_Label("The AboutDialog is non-modal. " "You can select parts of this text while the AboutDialog is shown."), m_ButtonBox(Gtk::Orientation::VERTICAL), m_Button("Show AboutDialog") { set_title("Gtk::AboutDialog example"); set_default_size(400, 150); set_child(m_VBox); m_VBox.append(m_Label); m_Label.set_expand(true); m_Label.set_wrap(true); m_Label.set_selectable(true); m_VBox.append(m_ButtonBox); m_ButtonBox.append(m_Button); m_Button.set_expand(true); m_Button.set_halign(Gtk::Align::CENTER); m_Button.set_valign(Gtk::Align::CENTER); m_Button.signal_clicked().connect(sigc::mem_fun(*this, &ExampleWindow::on_button_clicked) ); m_Dialog.set_transient_for(*this); m_Dialog.set_hide_on_close(); m_Dialog.set_logo(Gdk::Texture::create_from_resource("/about/gtkmm_logo.gif")); m_Dialog.set_program_name("Example application"); m_Dialog.set_version("1.0.0"); m_Dialog.set_copyright("Murray Cumming"); m_Dialog.set_comments("This is just an example application."); m_Dialog.set_license("LGPL"); m_Dialog.set_website("http://www.gtkmm.org"); m_Dialog.set_website_label("gtkmm website"); std::vector<Glib::ustring> list_authors; list_authors.push_back("Murray Cumming"); list_authors.push_back("Somebody Else"); list_authors.push_back("AN Other"); m_Dialog.set_authors(list_authors); m_Button.grab_focus(); } ExampleWindow::~ExampleWindow() { } void ExampleWindow::on_button_clicked() { m_Dialog.show(); //Bring it to the front, in case it was already shown: m_Dialog.present(); }
File: aboutdialog.gresource.xml (For use with gtkmm 4)
<?xml version="1.0" encoding="UTF-8"?> <gresources> <gresource prefix="/about"> <file>gtkmm_logo.gif</file> </gresource> </gresources>