В прикрепленном изображении в левом окне у меня есть консоль Ubuntu с содержимым файла, а в правом окне у меня есть содержимое того же файла в моей программе GTK +. Проблема в том, что я хочу, чтобы моя программа GTK + отображала файл точно так, как он отображается на моей консоли Ubuntu.
Я уже пытался отобразить его, добавив одну строку в один gtk_label и добавив эту метку в вертикальное поле, но результат был тот же.
Можно ли как-нибудь сделать так, чтобы моя программа gtk имела такой же размер / внешний вид, как и в консоли Ubuntu?
void Zarzadzanie::Wykonaj(GtkWidget* widget, GtkWidget* data)
{
string buffer;
string n="";
GtkWidget *dialog, *label, *vbox, *window2,*viewer;//Creating my dialog
dialog=gtk_dialog_new_with_buttons("Polaczenia sieciowe",GTK_WINDOW(gtk_widget_get_toplevel(data)), GTK_DIALOG_MODAL, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,GTK_STOCK_REFRESH,
GTK_RESPONSE_OK, NULL );
vbox=gtk_vbox_new(0,0); //creating new vbox
window2=gtk_scrolled_window_new(0,0); //creating new scrolled window
gtk_button_set_label(GTK_BUTTON(gtk_dialog_get_widget_for_response(GTK_DIALOG(dialog),GTK_RESPONSE_CLOSE)),"Zamknij Okno"); //setting label in dialog
gtk_scrolled_window_set_min_content_height(GTK_SCROLLED_WINDOW(window2),400); //setting min height in scrollable window
gtk_scrolled_window_set_min_content_width(GTK_SCROLLED_WINDOW(window2),700); //setting min width in scrollable windowviewer=gtk_text_view_new(); //creating new textview
gtk_text_view_set_editable(GTK_TEXT_VIEW (viewer), FALSE); //setting textview to not editable
gtk_container_add(GTK_CONTAINER(window2), viewer); //adding textview to scrollable window
gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),window2,0,0,0); //adding scrollable window to dialogifstream plik("Pomniejsze/netstat.txt"); //reading from file
if(plik==NULL) //checking if file is not empty
{
//i will add something later
}
else //if file is not empty
{
while(std::getline(plik, buffer)) //i read from file line by line
{
n+=buffer; //i add to "n" 1 line from file
n+="\n"; //i add "new line" to "n"}
char* z=new char[n.length()+1]; //i create new temporary char*
strcpy(z, n.c_str()); //i copy content of "n" to temporary char*
gtk_text_buffer_set_text(gtk_text_view_get_buffer(GTK_TEXT_VIEW(viewer)),z,-1); //i set text of textview to text from temp char*
g_print(z); //i print out temporary char* which can be seen on attached image on left window
delete [] z; //i delete temporary char*
}
g_signal_connect(dialog, "delete-event",G_CALLBACK(gtk_widget_destroy), NULL); // i add delete event to "x" button
gtk_widget_show_all(dialog); //i show my dialog
gint resp=gtk_dialog_run(GTK_DIALOG(dialog)); //i run my dialog
if(resp==GTK_RESPONSE_CLOSE) //i check if user clicked button
{
gtk_widget_destroy(dialog); //if button is clicked i destroy dialog
}
else if(resp==GTK_RESPONSE_OK)
{
//something will be added later
}
}
Вы используете шрифт переменной ширины. То, что вы действительно хотите, это моноширинный шрифт, которая является фиксированной шириной, поэтому все символы будут выстраиваться в ряд от одного ряда к другому.
Ты можешь использовать gtk_text_view_set_monospace()
использовать только моноширинный шрифт по умолчанию. Эта функция доступна только с версии GTK + 3.16.
Вот список распространенных моноширинных шрифтов. Вы можете установить шрифт для одного из них, используя PangoFontDescription
а также gtk_widget_override_font()
. Однако, поскольку это устарело и было заменено set_monospace()
функция, вам не нужно вручную вводить определенный моноширинный шрифт.
Других решений пока нет …