Я использую 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);