Gtk 如何将输出显示为文本而不是数字?

Gtk 如何将输出显示为文本而不是数字?,gtk,gtk3,gtkmm,gtk2,Gtk,Gtk3,Gtkmm,Gtk2,我将此代码用于按钮中的打印编号0到11: colorize_combo = gtk_combo_box_text_new_with_entry(); for (int i = 0; i <= 2; i += 1) gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(colorize_combo), g_strdup_printf("%d", i)); gtk_combo_box_set_active(GTK_COMBO_BOX(colo

我将此代码用于按钮中的打印编号0到11:

colorize_combo = gtk_combo_box_text_new_with_entry();   
for (int i = 0; i <= 2; i += 1)
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(colorize_combo), g_strdup_printf("%d", i));
gtk_combo_box_set_active(GTK_COMBO_BOX(colorize_combo), 11);
gtk_table_attach_defaults(GTK_TABLE(table), colorize_combo, 0, 1, 17, 18);

关于如何解决这项任务,你有什么建议?或者我可以在互联网上的哪些资源上找到帮助

这是我的C++代码的一部分:

void incdec2(GtkWidget *widget, const gchar *mode)
{

    else if (!g_strcmp0(mode, "colorized"))
    {

        if (gtk_image_get_pixbuf(GTK_IMAGE(img4)) == NULL)
            return;

        int type_color = atoi(gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(colorize_combo)));

        vector< Vec4i > hierarchy;
        int largest_contour_index = 0;
        int largest_area = 0;

        vector< vector <Point> > contours1;
        Mat alpha(src1.size(), CV_8UC1, Scalar(0));
        normalize(alpha, alpha, 0, 250, NORM_MINMAX, CV_8UC3);
        findContours(thresh, contours1, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE); // Find the contours in the image
        for (int i = 0; i< contours1.size(); i++) // iterate through each contour.
        {
            double a = contourArea(contours1[i], false);  //  Find the area of contour
            if (a>largest_area){
                largest_area = a;
                largest_contour_index = i;                //Store the index of largest contour
            }
        }
        drawContours(alpha, contours1, largest_contour_index, Scalar(255), CV_FILLED, 8, hierarchy);

        applyColorMap(unsharp, dstt, type_color);

        split(dstt, rgb);
        Mat rgbe[4] = { rgb[0], rgb[1], rgb[2], alpha };
        merge(rgbe, 4, im_color);

        imwrite("Colorized Image.png", im_color);
        gtk_image_set_from_file(GTK_IMAGE(img4), "Colorized Image.png");

    }

}

int main(int argc, char *argv[])
 {
 .
 .
 .
 .
 .

colorize_combo = gtk_combo_box_text_new_with_entry();   
for (int i = 0; i <= 11; i += 1)
    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(colorize_combo), g_strdup_printf("%d", i));


 //gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(colorize_combo), g_strdup_printf("AUTUMN", 0));
//gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(colorize_combo), g_strdup_printf("BONE", 1));
// gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(colorize_combo), g_strdup_printf("JET", 2));
//gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(colorize_combo), g_strdup_printf("WINTER", 3));
//gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(colorize_combo), g_strdup_printf("RAINBOW", 4));
//gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(colorize_combo), g_strdup_printf("OCEAN", 5));
//gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(colorize_combo), g_strdup_printf("SUMMER", 6));
//gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(colorize_combo), g_strdup_printf("SPRING", 7));
//gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(colorize_combo), g_strdup_printf("COOL", 8));
//gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(colorize_combo), g_strdup_printf("HSV", 9));
//gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(colorize_combo), g_strdup_printf("PINK", 10));
//gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(colorize_combo), g_strdup_printf("HOT", 11));
//gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(colorize_combo), g_strdup_printf("PARULA", 12));

gtk_combo_box_set_active(GTK_COMBO_BOX(colorize_combo), 11);
gtk_table_attach_defaults(GTK_TABLE(table), colorize_combo, 0, 1, 17, 18);


but13 = bold_img_button("Color", "E:/Works for Gov Project/DOC/GUI/logogui1/colorize243.png");
gdk_color_parse("#50a0ff", &color);
gtk_widget_modify_bg(but13, GTK_STATE_NORMAL, &color);
gtk_table_attach_defaults(GTK_TABLE(table), but13, 1, 2, 17, 18);
g_signal_connect(G_OBJECT(but13), "clicked", G_CALLBACK(incdec2), "colorized");


 .
 .
 .
 .

 }
void incdec2(GtkWidget*小部件,const gchar*模式)
{
如果(!g_strcmp0(模式,“彩色化”))
{
如果(gtk_图像_获取_pixbuf(gtk_图像(img4))==NULL)
返回;
int type_color=atoi(gtk_组合框_文本_获取活动文本(gtk_组合框_文本(彩色组合));
向量层次结构;
int最大轮廓指数=0;
int最大面积=0;
向量<向量>轮廓1;
Mat alpha(src1.size(),CV_8UC1,标量(0));
标准化(alpha,alpha,0,250,NORM_MINMAX,CV_8UC3);
查找轮廓(阈值、轮廓1、层次、CV_RETR_EXTERNAL、CV_CHAIN_APPROX_SIMPLE);//在图像中查找轮廓
对于(int i=0;i最大面积){
最大面积=a;
最大轮廓指数=i;//存储最大轮廓指数
}
}
绘制轮廓(alpha,轮廓1,最大轮廓索引,标量(255),CV填充,8,层次);
applyColorMap(反锐化、dstt、类型_颜色);
分割(dstt、rgb);
Mat rgbe[4]={rgb[0],rgb[1],rgb[2],alpha};
合并(rgbe,4,im_颜色);
imwrite(“Colorized Image.png”,im_color);
gtk_image_set_来自_文件(gtk_image(img4),“Colorized image.png”);
}
}
int main(int argc,char*argv[])
{
.
.
.
.
.
彩色组合=gtk组合框文本新建,带有输入();

对于(int i=0;i更新了如何解码组合框中的值

您不需要
g\u strdup\u printf
gtk\u combo\u box\u text\u append\u text
获取一个
const gchar*
。这意味着它不会修改您传递的字符串,它将自己创建一个副本

在文件顶部,声明:

static const char *color_names[] = { "AUTUMN", "BONE", "JET" };
然后,在填充组合框的地方,替换:

string texts[] = { "AUTUMN", "BONE", "JET" };
int size = sizeof(texts) / sizeof(string);
for (int i = 0; i < size; i++)
    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(colorize_combo), g_strdup_printf("%s", texts[i]));
int type_color = atoi(gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(colorize_combo)));
与:

int type_color=-1;
gchar*选定的颜色名称=gtk组合框文本获取活动文本(gtk组合框文本(彩色组合));
对于(int i=0;i
您特别要求将数字显示为带有
g\u strdup\u printf(“%d”,i)的数字
。字符串从哪里来?为什么标记为OpenCV?我看不到它的踪迹。@DanMašek OP似乎只是标记了与他们整个项目相关的所有内容;他们最后的几个问题是关于在他们的程序中添加一个关于OpenCV的对话框,我认为这是在使用它OpenCV@DanMašek和andlabs,我编辑我的问题。你可以在for循环中创建一个字符串数组和索引。非常感谢您的指导。但是您的代码只显示文本,无法正常工作。我认为这是因为在up中显示的“incdec2”函数中使用“!g_strcmp0”。“无法正常工作”这不是人们所期望的有用反馈……你想要的是文本而不是数字,我认为这部分工作得很好,这就是你的问题所在。顺便说一句,如果你不用其他东西替换
atoi
调用,你将无法正确解释组合框中的文本。记住组合框中没有任何数字更多。@liberforce,我真的很抱歉提及此事。我喜欢你们,非常感谢你们指导我……我发现了问题。在函数“applyColorMap(unsharp,dstt,type_color);”输入颜色是一个整数,我想我们不能用文本来显示它们。也许,我们可以用虚拟的方式将它们显示为文本,而不是按钮中的数字。嘿,别担心,我没有生气,只是在stackoverflow上,你只问一个问题就一个问题。对于你的问题,这就是我刚才所说的:
atoi
converts字符串转换为整数,但无法知道如何将颜色名称(如
“秋”
)转换为整数。只需移动文件顶部的
文本
数组声明(在其前面添加
静态
关键字),并将
atoi
调用替换为一个循环,该循环将组合框文本与
文本
数组的每个可能值进行比较。一旦它们匹配,您就知道要放入
的颜色索引。
string texts[] = { "AUTUMN", "BONE", "JET" };
int size = sizeof(texts) / sizeof(string);
for (int i = 0; i < size; i++)
    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(colorize_combo), g_strdup_printf("%s", texts[i]));
for (int i = 0; i < G_N_ELEMENTS(texts); i++)
    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(colorize_combo), texts[i]);
int type_color = atoi(gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(colorize_combo)));
int type_color = -1;
gchar * selected_color_name = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(colorize_combo));
for (int i = 0; i < G_N_ELEMENTS(color_names); i++)
    if (g_strcmp0(selected_color_name, color_names[i]) == 0)
        type_color = i;

// gtk_combo_box_text_get_active_text return a string that must be freed as stated in the doc
g_free(selected_color_name);