use*_*324 3 c++ gtk gtkmm gtk3
我已经搜索了很多,但仍然找不到一个很好的例子来说明如何使用GTK. 我的程序已经存在C++,但我不介意一个C可以帮助我理解原理的例子。
因此,基本思想是创建我自己的派生对象,Gtk::Window而不是Gtk::Dialog. Dialog有一个运行方法,可以完美地打开模式弹出窗口,但对于我想要做的事情来说,它不够灵活。有谁知道当我单击程序中的按钮时如何生成一个新窗口?
例如:
void MainWindow::on_button_clicked()
{
NewWindow window;
//Some code to display that window and stay in a loop until told to return
}
Run Code Online (Sandbox Code Playgroud)
Gtk::WindowNewWindow 是这样派生的:
class NewWindow : public Gtk::Window
{
//Normal stuff goes here
}
Run Code Online (Sandbox Code Playgroud)
任何事情都会有所帮助...我在这里真的很困惑!
拥有新窗口的另一种方法是创建一个指向 Gtk 窗口变量 ( Gtk::Window* about_window_;) 的指针,然后将 Gtk 窗口变量设置为另一个窗口的新实例 ( about_window_ = new Window;),然后显示新窗口 ( about_window_->show();)。下面是一个完整的例子:
class AboutWindow : public Gtk::Window
{
public:
AboutWindow();
~AboutWindow();
protected:
Gtk::Label lbl_;
};
AboutWindow::AboutWindow()
{
this->set_default_size(100, 100);
this->set_title("About");
lbl_.set_label("About label");
this->add(lbl_);
this->show_all_children();
}
AboutWindow::~AboutWindow()
{
}
class MainWindow : public Gtk::Window
{
public:
MainWindow();
virtual ~MainWindow();
protected:
void onButtonClicked();
void aboutWinClose();
Gtk::Button button_;
Gtk::Label lbl_;
Gtk::Box box_;
Gtk::AboutWindow* aboutw_;
};
MainWindow::MainWindow()
{
this->set_default_size(100, 100);
box_.set_orientation(Gtk::ORIENTATION_VERTICAL);
this->add(box_);
box_.pack_start(lbl_);
lbl_.set_label("a test");
button_.set_label("Open About Window");
box_.pack_end(button_);
button_.signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::onButtonClicked));
aboutw_ = 0;
this->show_all_children();
}
MainWindow::~MainWindow()
{
}
void MainWindow::onButtonClicked()
{
if(aboutw_ != 0)
return;
aboutw_ = new AboutWindow;
aboutw_->signal_hide().connect(sigc::mem_fun(*this, &MainWindow::aboutWinClose));
aboutw_->show();
}
void MainWindow::aboutWinClose()
{
aboutw_ = 0;
}
Run Code Online (Sandbox Code Playgroud)
添加以供参考。