gpt4 book ai didi

c++ - gtkmm - 多窗口/弹出窗口

转载 作者:搜寻专家 更新时间:2023-10-31 00:16:40 25 4
gpt4 key购买 nike

我已经搜索了很多,但仍然找不到一个很好的例子来说明如何使用 GTK 在同一个应用程序中拥有多个窗口。我的程序是用 C++ 编写的,但我不介意用 C 编写的示例,它无论如何都会帮助我理解原理。

因此,基本思想是从 Gtk::Window 而不是 Gtk::Dialog 创建我自己的派生对象。 Dialog 有一个 run 方法,可以完美地打开模式弹出窗口,但它不够灵活,无法满足我的要求。有谁知道当我在我的程序中单击一个按钮时我将如何生成一个新窗口?

例如:

void MainWindow::on_button_clicked()
{

NewWindow window;
//Some code to display that window and stay in a loop until told to return
}

NewWindow 是从 Gtk::Window 派生的:

class NewWindow : public Gtk::Window
{

//Normal stuff goes here

}

任何事情都会有帮助...我在这里真的很困惑!

最佳答案

另一种创建新窗口的方法是创建一个指向 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;
}

添加以供引用。

关于c++ - gtkmm - 多窗口/弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15441157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com