c++ - g超时在gtk c ++中添加秒数
问题描述
我正在为显示消息创建类 10 秒,然后关闭表单。我使用g_timeout_add_seconds
延时功能。在编译时我面临如下错误:
msgbox.cpp:84:72: error: invalid use of void expression
int a = g_timeout_add_seconds(1, this->Label(i), (gpointer)this);
代码如下:
void Msgbox::LabelUpdate(void)
{
int i = 1;
while(i <= 10)
{
g_timeout_add_seconds(1, this->Label(i), (gpointer)this);
i++;
}
gtk_widget_set_sensitive(close_btn , TRUE);
gtk_widget_grab_focus(close_btn);
}
void Msgbox::Label(int time)
{
char buf[256];
sprintf(buf, "<span color=\"purple\"><b> Time to wait : %d secs </b></span>", time);
gtk_label_set_markup (GTK_LABEL(msg_lbl), buf);
}
请帮助!提前致谢!
解决方案
guint g_timeout_add_seconds (guint interval, GSourceFunc function, gpointer data);
设置以默认优先级 G_PRIORITY_DEFAULT 定期调用的函数。重复调用该函数,直到返回FALSE,此时超时自动销毁,该函数将不再被调用。
这在内部使用 g_timeout_source_new_seconds() 创建一个主循环源,并使用 g_source_attach() 将其附加到主循环上下文。如果您需要更好的控制,您可以手动执行这些步骤。另请参阅 g_timout_add_seconds_full()。
interval:调用函数之间的时间,以秒为单位
function:调用函数
data:传递给函数的数据
Returns:事件源的 ID(大于 0)。自 2.14 起
因此GSourceFunc被定义为:
gboolean (*GSourceFunc) (gpointer data);
指定传递给 g_timeout_add()、g_timeout_add_full()、g_idle_add() 和 g_idle_add_full() 的函数类型。
data :传递给函数的数据,在使用上述函数之一创建源时设置。
返回:如果应该删除源,它应该返回 FALSE。
要MsgBox::Label()
用作 的第二个参数g_timeout_add_seconds()
,它必须匹配 的签名GSourceFunc
。
即它必须
- 成为
static
成员函数 - 有返回类型
gboolean
- 有一个参数
gpointer
。
OP 没有公开如何MsgBox::Label()
声明(关于),但无论如何签名都是错误的。static
推荐阅读
- elasticsearch - 如何在弹性搜索中选择不同的孩子
- android - 交换片段而不是替换?
- c# - 根据 HttpRequest 模拟属性
- react-native - React Native:在承诺之外重用承诺参数?
- visual-studio-2017 - 由于路径太长,Nuget 安装失败
- oracle - Oracle:使用 Out 参数调用 SP
- java - 如何使用 Spark StructuredStream API 从 kafka 反序列化 java 对象,没有 Avro 或 Json?
- javascript - 如何将 jquery 变量添加到 span 类属性中?
- python - Dataframe.sample - 权重 - 如何使用它?
- sql-server - 无法在 Scintific Linux 7.5 上使用 pyodbc 连接到 MS SQL Server