0
gtkmmで2つのテキストビューを持つウィンドウを作成しようとします。テキストビューは垂直分割画面として配置する必要があります。そのような : GTK +/gtkmmグリッドの分割画面
後、私は、Emacsのように、何度も何度も垂直方向と水平方向の画面を分割し、分割領域のサイズを変更できるようにしたいです。
シンプルな分割画面は簡単にできるはずだと思っていましたが、すでにそこにはまっています。 レイアウトコンテナとしてGtk :: Gridを使用することを考えました。ユーザーが画面を分割したいときはいつでも、行または列を追加し、新しく作成した領域に新しいテキストビューを追加することを考えました。ここで
は私のコードです:
main.cc
#include <gtkmm/application.h>
#include "examplewindow.h"
int main(int argc, char *argv[])
{
auto app = Gtk::Application::create(argc, argv, "org.gtkmm.example");
ExampleWindow window;
//Shows the window and returns when it is closed.
return app->run(window);
}
examplewindow.h
#ifndef GTKMM_EXAMPLEWINDOW_H
#define GTKMM_EXAMPLEWINDOW_H
#include <gtkmm.h>
class ExampleWindow : public Gtk::Window
{
public:
ExampleWindow();
virtual ~ExampleWindow();
protected:
Gtk::Grid main_grid;
Gtk::ScrolledWindow scrolled_window1;
Gtk::ScrolledWindow scrolled_window2;
Gtk::TextView text_view1;
Gtk::TextView text_view2;
Glib::RefPtr<Gtk::TextBuffer> text_buffer1, text_buffer2;
void fill_buffers();
};
#endif //GTKMM_EXAMPLEWINDOW_H
examplewindow.cc
#include "examplewindow.h"
ExampleWindow::ExampleWindow() {
set_title("Gtk splitted textviews");
set_border_width(12);
add(main_grid);
scrolled_window1.add(text_view1);
scrolled_window1.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
scrolled_window2.add(text_view2);
scrolled_window1.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
main_grid.insert_column(0);
main_grid.attach(scrolled_window1, 0, 0, 1, 1);
//scrolled_window1.set_hexpand(true);
//scrolled_window1.set_vexpand(true);
main_grid.attach(scrolled_window2, 1, 0, 1, 1);
//scrolled_window1.set_hexpand(true);
//scrolled_window1.set_vexpand(true);
fill_buffers();
text_view1.set_buffer(text_buffer1);
text_view2.set_buffer(text_buffer2);
show_all_children();
}
ExampleWindow::~ExampleWindow() {}
void ExampleWindow::fill_buffers() {
text_buffer1 = Gtk::TextBuffer::create();
text_buffer1->set_text("This is the text from TextBuffer #1.");
text_buffer2 = Gtk::TextBuffer::create();
text_buffer2->set_text(
"This is some alternative text, from TextBuffer #2.");
}
ビルドで:
g++ examplewindow.cc main.cc -o splittv `pkg-config gtkmm-3.0 --cflags --libs`
は、テキストビューは、小規模に明らかにされています。両方のテキストビューでhexpandとvexpandをtrueに設定すると、text_view1はtext_view2を抑止します。
を使用することができますコメントで示唆したように、私は[ 'GtkPaned'](https://developer.gnome.org/gtk3に探し始めるだろう/stable/GtkPaned.html) – Gerhardh
コードに入力ミスがあります。 scrolled_window1にhexpandとvexpandを2回設定します。おそらく、秒をscrolled_window2に変更したいと考えています。 – JohnKoch