我正在使用 Gtkmm 3+,我想要做的是让文本缓冲区具有常量字符串“>”,即使用户尝试删除它。此外,当用户按下返回时,它会自动再次出现。基本上有一个像终端一样的常量字符串。
我能想到的唯一方法是连接到删除和退格信号,这样用户就不能删除字符串。但是,有没有更好的方法?
到目前为止,这是我能想到的唯一方法:
//in constructor
txt_view_i_.signal_event().connect(sigc::mem_fun(*this, &MainWindow::inputEvent));
//function
bool MainWindow::inputEvent(GdkEvent* event)
{
if((event->key.keyval == GDK_KEY_BackSpace || event->key.keyval == GDK_KEY_Delete) && buffer_input_->get_char_count() < 3)
return true;
return false;
}
但不能完美地工作,因为如果您输入超过 3 个字符然后转到行首,您可以删除常量字符串。
我刚刚想到的另一种方法是向 TextView 小部件添加标签。我这样做了,但是用户仍然可以删除它。这是代码:
Gtk::TextBuffer::iterator it = buffer_input_->get_iter_at_line(1);
Glib::RefPtr<Gtk::TextChildAnchor> refAnchor = buffer_input_->create_child_anchor(it);
Gtk::Label* lbl = Gtk::manage(new Gtk::Label("> "));
txt_view_i_.add_child_at_anchor(*lbl, refAnchor);