非模态关于对话框(AboutDialog)
AboutDialog提供了一个简单的显示程序有关信息(例如标志、名称、版权、网站、许可证)的方式。
本章中的大部分对话框都是模态的,也就是说在显示它们的时候应用程序的其他部分是被冻结的。你也可以创建一个非模态的对话框,这样的对话框不会冻结应用程序的其他窗口。下面的示例显示了一个非模态的AboutDialog。通常你不会想要将该对话框做成非模态,但这不表示非模态对话框在其它情况下没有用。例如:在gedit中搜索和替换对话框就是非模态的。
- 15.5.1. 示例
15.5.1. 示例
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>