gpt4 book ai didi

c++ - GTK+ 3.0 C++ 将 GtkTextBuffer 传递给函数

转载 作者:行者123 更新时间:2023-11-28 06:36:25 24 4
gpt4 key购买 nike

我正在学习 GTK+ 库,但在我尝试将文本从文件加载到 TextView 时遇到了一些问题。

// main.cpp
GtkWidget *textInput;
GtkTextBuffer *textBuffer;
[...]
//Create text input field
textInput = gtk_text_view_new();
gtk_box_pack_start(GTK_BOX (vbox), textInput, 1, 1, 0);
textBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW (textInput));

// Menu actions
g_signal_connect(G_OBJECT(openFile), "activate", G_CALLBACK(showOpenFileDialog), textBuffer);

当我尝试更改 main.cpp 中的 textBuffer 时,一切顺利。但是……

void showOpenFileDialog(GtkTextBuffer *buffer)
{
GtkWidget *openFileDialog;
openFileDialog = gtk_file_chooser_dialog_new("Open file", GTK_WINDOW(NULL), GTK_FILE_CHOOSER_ACTION_OPEN,GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL);
gtk_dialog_run(GTK_DIALOG(openFileDialog));

const gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(openFileDialog));

ifstream file(filename);
string line;
if(file.is_open())
{
while(getline(file, line))
{
GtkTextIter endOfTextInput;
gtk_text_buffer_get_end_iter(buffer, &endOfTextInput);
gtk_text_buffer_insert(buffer, &endOfTextInput, line.c_str(), line.size());
}
}

gtk_widget_destroy(openFileDialog);
}

从文件中加载每一行,GTK 将运行时错误输出到控制台:

(asdddd.exe:3872): Gtk-CRITICAL **: gtk_text_buffer_get_end_iter: assertion `GTK
_IS_TEXT_BUFFER (buffer)' failed

(asdddd.exe:3872): Gtk-CRITICAL **: gtk_text_buffer_insert: assertion `GTK_IS_TE
XT_BUFFER (buffer)' failed

我试过这样做:

GTK_TEXT_BUFFER(buffer)

但它只是给了我另一个错误

(asdddd.exe:3872): GLib-GObject-WARNING **: invalid cast from `GtkMenuItem' to `
GtkTextBuffer'

谁能帮帮我?

最佳答案

GtkMenuItem::activate 的签名是

void signalHandler(GtkMenuItem *sender, gpointer user_data);

您的信号处理程序(在本例中为 showOpenFileDialog())必须具有此签名。在你的例子中,你将文本缓冲区正确地传递到 g_signal_connect() 行,但是它被分配给 user_data 参数(GtkMenuItem 本身,在本例中是 openFile,是 sender)。

不幸的是,不能对 GObject 信号进行静态类型检查。我不知道是否存在可以提供帮助的静态分析工具。

关于c++ - GTK+ 3.0 C++ 将 GtkTextBuffer 传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26702751/

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