如何解决在 gtkmm 应用程序中创建超时方法会导致“不应忽略无效值”错误
我刚刚开始使用 gtkmm,我试图通过让超时方法调用我的 Update() 方法以预定义的时间间隔更新标签。但是,在我的 MainWindow 类的构造函数中编写以下行时:
Glib::signal_timeout().connect(sigc::mem_fun(*this,&MainWindow::Update),1000);
我收到以下错误:
/usr/include/sigc++-2.0/sigc++/functors/slot.h:136:36: 错误:没有忽略无效值,因为它应该是 return (typed_rep->functor_)();
有人知道如何解决这个问题或原因是什么吗?
编辑: 这是一个最小且可重复的示例:
main.cc
#include <gtkmm.h>
#include "MainWindow.h"
int main(int argc,char* argv[])
{
auto app = Gtk::Application::create(argc,argv,"com.companyname.test");
Glib::RefPtr<Gtk::Builder> builder = Gtk::Builder::create_from_file("prototype.glade");
MainWindow* mainWindow = 0;
builder->get_widget_derived("mainWindow",mainWindow);
return app->run(*mainWindow);
}
主窗口.h
#pragma once
#include <gtkmm.h>
class MainWindow : public Gtk::Window
{
public:
MainWindow(BaseObjectType* cobject,const Glib::RefPtr<Gtk::Builder>& refGlade);
virtual ~MainWindow();
protected:
//Signal handlers:
void Update();
};
MainWindow.cpp
#include "MainWindow.h"
#include <iostream>
MainWindow::MainWindow(BaseObjectType* cobject,const Glib::RefPtr<Gtk::Builder>& refGlade)
{
// The following line creates "void value not ignored as it ought to be (...)" error
Glib::signal_timeout().connect(sigc::mem_fun(*this,1000);
}
MainWindow::~MainWindow()
{
}
void MainWindow::Update()
{
std::cout << "Update" << std::endl;
}
解决方法
正如 Scheff 在评论中提到的,我忘记了 MainWindow::Update
需要返回 bool
类型的值,正如 signal_timeout
所期望的那样。将更新方法更改为以下内容,解决了问题:
bool MainWindow::Update()
{
std::cout << "Update" << std::endl;
return true;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。