我正在學習GTK +庫,並且在嘗試從文件加載文本到TextView時遇到了一些問題。GTK + 3.0 C++將GtkTextBuffer傳遞給函數
// 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 * openFile'做了工作,謝謝! – 2014-11-02 19:38:51