- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试连接到 GTKMM configure_event 信号。 property_is_active 和 delete_event 等其他信号工作正常。
在下面的代码示例中,它编译并运行,但是当我用鼠标移动窗口或调整窗口大小时,“cout”不显示在控制台上。
我不知道哪里出了问题。正如 GTKMM 文档所说,代码遵循与其他“事件”相同的模式,例如我之前做过的按钮按下:启用事件的 MASK,然后将其信号连接到我的处理程序。基于“google”返回的一些东西,我尝试了这里显示的 add_event(...) 和 set_event(...),并在添加/设置调用之前包含了一个“show()”,以努力以满足旧教程中的一些提示(可能来自 GTK2)。各种论坛上还有其他帖子表明人们已经过了这一点(主要是 C++ 以外的语言。
(当前的 Debian Linux,GTK 3)
如有任何帮助,我们将不胜感激。
#include <fstream>
#include <istream>
#include <ostream>
#include <iostream>
#include <gdkmm.h>
#include <gtkmm.h>
using namespace std;
class AdjunctWindow : public Gtk::Window {
public:
AdjunctWindow();
~AdjunctWindow();
bool on_configure_changed(GdkEventConfigure* configure_event);
};
AdjunctWindow::AdjunctWindow() {
add_events(Gdk::STRUCTURE_MASK);
signal_configure_event().connect( sigc::mem_fun(*this,
&AdjunctWindow::on_configure_changed));
}
AdjunctWindow::~AdjunctWindow(){
}
bool AdjunctWindow::on_configure_changed(GdkEventConfigure* configure_event) {
cout << "configure changed\n";
return false;
}
int main(int argc, char** argv) {
Gtk::Main kit(argc, argv);
Gtk::Main::run(*(new AdjunctWindow()));
}
最佳答案
connect()
使用第二个参数来设置您的信号处理程序是在默认信号处理程序之前还是之后调用。默认值为 true
,这意味着您的信号处理程序将在默认值之后被调用。在这种情况下,您希望它在之前被调用并且应该添加 false
参数。
参见 https://developer.gnome.org/glibmm/2.48/classGlib_1_1SignalProxy.html了解更多信息。
调用了信号处理程序的代码的调整版本如下。
#include <iostream>
#include <gtkmm.h>
class AdjunctWindow : public Gtk::Window {
public:
AdjunctWindow();
~AdjunctWindow();
bool on_configure_changed(GdkEventConfigure* configure_event);
};
AdjunctWindow::AdjunctWindow() {
add_events(Gdk::STRUCTURE_MASK);
signal_configure_event().connect(
sigc::mem_fun(*this, &AdjunctWindow::on_configure_changed), false);
}
AdjunctWindow::~AdjunctWindow(){
}
bool AdjunctWindow::on_configure_changed(GdkEventConfigure* configure_event) {
std::cout << "configure changed\n";
return false;
}
int main(int argc, char** argv) {
Gtk::Main kit(argc, argv);
Gtk::Main::run(*(new AdjunctWindow()));
}
请注意,最好不要使用 using namespace std;
,因为它会导致 namespace 之间的名称冲突。阅读 Why is "using namespace std" considered bad practice?其中解释得更详细。
关于c++ - 无法连接到 GTKMM signal_configure_event,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42468152/
我正在尝试连接到 GTKMM configure_event 信号。 property_is_active 和 delete_event 等其他信号工作正常。 在下面的代码示例中,它编译并运行,但是当
我是一名优秀的程序员,十分优秀!