gpt4 book ai didi

c - 通过用户输入更新 GTK+3 中的面板

转载 作者:行者123 更新时间:2023-11-30 17:07:45 25 4
gpt4 key购买 nike

我是 GTK 新手,不太了解如何使用 g_signal_connect()。到目前为止,我正在构建一个基本的文件浏览器,它有两个面板,一个带有目录 View ,一个带有文件 View

#include <pwd.h>
#include <sys/types.h>
#include <string.h>
#include <gtk/gtk.h>
#include <errno.h>
#include <dirent.h>
#include <limits.h>

#include "ListView/buildList.h"
#include "TreeView/buildTree.h"

#define MAX_PATH 1024

int main(int argc, char **argv) {
gtk_init (&argc, &argv);
GtkTreeStore *store_tree = gtk_tree_store_new (COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
GtkTreeStore *store_list = gtk_tree_store_new (COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
char *working_dir = getenv("HOMEs");
if (working_dir != NULL) {
printf("Home dir in enviroment ");
printf("%s\n", working_dir);
}
else {
working_dir = pwd();
if(working_dir != NULL){
printf("Failed to find Home using current directory \n");
}
else{
printf("Directory error terminate");
exit(0);
}
}

GtkTreeIter iter_p;
if(list_dir(store_tree, working_dir, iter_p, 0) != 0){
printf ("Error building tree");
return 1;
}
if(build_list(store_list, working_dir) != 0){
printf ("Error building tree");
return 1;
}
//build first two views, tree and list.
GtkWidget *treeview = gtk_tree_view_new ();
GtkWidget *listview = gtk_tree_view_new ();
build_treeview(treeview);
build_listview(listview);

GtkTreeSelection *selection;
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(treeview));
g_signal_connect (G_OBJECT(selection), "changed",
G_CALLBACK(item_selected), NULL);

gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), GTK_TREE_MODEL (store_tree));
gtk_tree_view_set_model (GTK_TREE_VIEW (listview), GTK_TREE_MODEL (store_list));

g_object_unref (store_tree);
g_object_unref (store_list);

display (treeview, listview);

gtk_main ();
return 0;
}

我希望能够检测用户何时选择目录并更改文件面板以显示新文件。现在,当它检测到更改时,它只是输出以控制台 selection 提供给它的一些信息。查看文档似乎 G_CALLBACK 只能给出两个参数:指向数据的指针和选择。

我想知道是否有某种方法可以使用 GTK 等待目录更改并更新文件面板

/*注释

treeview:是一列,是一个gtk_tree结构

list_dir:从store_tree中的某个路径递归创建目录子树

listview:一列名称,其中包含文件名称

build_list:选择时的 TreeView 可以返回该目录的路径。将所有文件存储在 gtk_store store_list 目录中

最佳答案

您的 gtk_tree_view_get_selection 在应用程序窗口显示之前执行。因此,它将始终(!)为空,并且由于空选择永远不会更改,因此您将永远不会收到“changed”信号。

信号连接本身是正确的。

关于c - 通过用户输入更新 GTK+3 中的面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33980610/

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