我对C++gtkmm(Linux(编程非常陌生。我开发了一个程序,需要在gui上另一个按钮的回调函数中单击一个按钮。我试过了button.activate((但它只为按钮点击设置动画,但不会调用回调函数。当我手动单击按钮时,会调用回调函数。请解释如何将事件注入gtkmmC++编码中。事件可能包括按下按钮、按键等。
下面是一个使用Gtkmm 3.24进行按钮点击的示例:
#include <iostream>
#include <gtkmm.h>
class MainWindow : public Gtk::ApplicationWindow
{
public:
MainWindow();
private:
Gtk::Grid m_layout;
Gtk::Label m_label;
Gtk::Button m_buttonA;
Gtk::Button m_buttonB;
};
MainWindow::MainWindow()
: m_buttonA{"A"}
, m_buttonB{"B"}
{
m_label.set_text("Click a button...");
m_buttonA.signal_clicked().connect(
[this](){
std::cout << "Button A clicked!" << std::endl;
// Emits "clicked" on button B, just like when
// a user clicks it:
m_buttonB.clicked();
m_buttonB.activate_action("clicked");
}
);
m_buttonB.signal_clicked().connect(
[this](){
std::cout << "Button B clicked!" << std::endl;
}
);
m_layout.attach(m_buttonA, 0, 0, 1, 1);
m_layout.attach(m_buttonB, 1, 0, 1, 1);
add(m_layout);
}
int main(int argc, char *argv[])
{
std::cout << "Gtkmm version : " << gtk_get_major_version() << "."
<< gtk_get_minor_version() << "."
<< gtk_get_micro_version() << std::endl;
auto app = Gtk::Application::create(argc, argv, "org.gtkmm.examples.base");
MainWindow window;
window.show_all();
return app->run(window);
}
然而,对于Gtkmm4,clicked()
方法似乎已经从Gtk::Button
的接口中删除。通过查看新的接口,有一个activate_action
方法(继承自Gtk::Widget
(可能可以工作。然而,我这里没有Gtkmm4,所以我不能尝试它。