- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
具有以下代码:
MyTreeView::MyTreeView(GtkTreeView* cobject, const Glib::RefPtr<Gtk::Builder>& builder)
: Gtk::TreeView(cobject)
{
Glib::RefPtr< Gtk::TreeStore > treeModel;
treeModel = Gtk::TreeStore::create(treeColumns);
this->set_model(treeModel);
Gtk::TreeModel::Row row = *(treeModel->append());
row[treeColumns.id] = 1;
row[treeColumns.name] = "one";
Gtk::TreeModel::Row childrow = *(treeModel->append(row.children()));
childrow[treeColumns.id] = 11;
childrow[treeColumns.name] = "eleven";
childrow = *(treeModel->append(row.children()));
childrow[treeColumns.id] = 12;
childrow[treeColumns.name] = "twelve";
row = *(treeModel->append());
row[treeColumns.id] = 2;
row[treeColumns.name] = "two";
row = *(treeModel->append());
row[treeColumns.id] = 3;
row[treeColumns.name] = "three";
childrow = *(treeModel->append(row.children()));
childrow[treeColumns.id] = 31;
childrow[treeColumns.name] = "thirtyone";
Gtk::TreeModel::Row subchild = *(treeModel->append(childrow.children()));
subchild[treeColumns.id] = 311;
subchild[treeColumns.name] = "three hundred eleven";
Gtk::TreeViewColumn *view_column = Gtk::manage(new Gtk::TreeViewColumn("Name", treeColumns.name));
Gtk::CellRendererText *cellRenderer = Gtk::manage(new Gtk::CellRendererText());
view_column->pack_start(*cellRenderer, false);
view_column->set_cell_data_func(*cellRenderer, sigc::mem_fun(*this, &MyTreeView::on_cell_data_name));
this->append_column(*view_column);
}
void MyTreeView::on_cell_data_name(Gtk::CellRenderer* renderer, const Gtk::TreeModel::iterator& iter)
{
//Get the value from the model and show it appropriately in the view:
Gtk::TreeModel::Row row = *iter;
int id = row[treeColumns.id];
Glib::ustring name = row[treeColumns.name];
Gtk::CellRendererText* text_renderer = dynamic_cast<Gtk::CellRendererText*>(renderer);
if (id == 11)
{
text_renderer->property_weight().set_value(Pango::Weight::WEIGHT_HEAVY);
}
else
{
text_renderer->property_weight().set_value(Pango::Weight::WEIGHT_NORMAL);
}
if(text_renderer)
{
text_renderer->property_text() = name;
}
}
我有以下内容:
所以数据在某种子列或类似的列中是重复的。为什么会这样?我该怎么做才能只有呈现的文本(使用正确的字体)。
我在没有使用Glade的情况下成功地做了一个例子,问题依然存在:
treeview.cpp:
#include <gtkmm.h>
#include "MyWindow.hpp"
int main(int argc, char *argv[])
{
Glib::RefPtr<Gtk::Application> app = Gtk::Application::create(argc, argv, "org.spike.treeview");
MyWindow window;
app->run(window);
return 0;
}
MyWindow.hpp:
#include <gtkmm.h>
#include "MyTreeView.hpp"
class MyWindow : public Gtk::ApplicationWindow
{
public:
MyWindow();
virtual ~MyWindow();
protected:
MyTreeView *treeView;
};
MyTreeView.hpp:
#include <gtkmm.h>
class MyTreeView : public Gtk::TreeView
{
public:
MyTreeView();
void on_cell_data_name(Gtk::CellRenderer* renderer, const Gtk::TreeModel::iterator& iter);
class ModelColumns : public Gtk::TreeModel::ColumnRecord
{
public:
ModelColumns()
{ add(id); add(name); add(type); add(publicKey); add(privateKey); }
Gtk::TreeModelColumn<int> id;
Gtk::TreeModelColumn<Glib::ustring> name;
Gtk::TreeModelColumn<char> type;
Gtk::TreeModelColumn<Glib::ustring> publicKey;
Gtk::TreeModelColumn<Glib::ustring> privateKey;
} treeColumns;
};
MyWindow.cpp:
#include <iostream>
#include "MyWindow.hpp"
MyWindow::MyWindow()
{
treeView = Gtk::manage(new MyTreeView());
add(*treeView);
show_all_children();
}
MyWindow::~MyWindow()
{}
MyTreeView.cpp:
#include <iostream>
#include "MyTreeView.hpp"
MyTreeView::MyTreeView()
{
Glib::RefPtr< Gtk::TreeStore > treeModel;
treeModel = Gtk::TreeStore::create(treeColumns);
this->set_model(treeModel);
Gtk::TreeModel::Row row = *(treeModel->append());
row[treeColumns.id] = 1;
row[treeColumns.name] = "one";
Gtk::TreeModel::Row childrow = *(treeModel->append(row.children()));
childrow[treeColumns.id] = 11;
childrow[treeColumns.name] = "eleven";
childrow = *(treeModel->append(row.children()));
childrow[treeColumns.id] = 12;
childrow[treeColumns.name] = "twelve";
row = *(treeModel->append());
row[treeColumns.id] = 2;
row[treeColumns.name] = "two";
row = *(treeModel->append());
row[treeColumns.id] = 3;
row[treeColumns.name] = "three";
childrow = *(treeModel->append(row.children()));
childrow[treeColumns.id] = 31;
childrow[treeColumns.name] = "thirtyone";
Gtk::TreeModel::Row subchild = *(treeModel->append(childrow.children()));
subchild[treeColumns.id] = 311;
subchild[treeColumns.name] = "three hundred eleven";
// this->append_column_editable("Name (orig)", treeColumns.name);
// this->append_column("Id", treeColumns.id);
Gtk::TreeViewColumn *view_column = Gtk::manage(new Gtk::TreeViewColumn("Name", treeColumns.name));
Gtk::CellRendererText *cellRenderer = Gtk::manage(new Gtk::CellRendererText());
view_column->pack_start(*cellRenderer, false);
view_column->set_cell_data_func(*cellRenderer, sigc::mem_fun(*this, &MyTreeView::on_cell_data_name));
this->append_column(*view_column);
}
void MyTreeView::on_cell_data_name(Gtk::CellRenderer* renderer, const Gtk::TreeModel::iterator& iter)
{
//Get the value from the model and show it appropriately in the view:
Gtk::TreeModel::Row row = *iter;
int id = row[treeColumns.id];
Glib::ustring name = row[treeColumns.name];
Gtk::CellRendererText* text_renderer = dynamic_cast<Gtk::CellRendererText*>(renderer);
if (id == 11)
{
text_renderer->property_weight().set_value(Pango::Weight::WEIGHT_HEAVY);
}
else
{
text_renderer->property_weight().set_value(Pango::Weight::WEIGHT_NORMAL);
}
if(text_renderer)
{
text_renderer->property_text() = name;
}
}
最佳答案
因为这一行:
Gtk::TreeViewColumn *view_column = Gtk::manage(new Gtk::TreeViewColumn("Name", treeColumns.name));
您已经指定了 TreeModel 列而不仅仅是标题,因此它添加了一个默认的单元格渲染器,该渲染器具有该列中该数据的默认渲染。你需要这个:
Gtk::TreeViewColumn *view_column = Gtk::manage(new Gtk::TreeViewColumn("Name"));
关于c++ - 为什么在gtkmm中使用CellRenderer时TreeView中的信息显示两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31271632/
如何使 JTable 中的文本变为粗体,我尝试了以下方法,它确实适用于颜色,但为了使文本变为粗体,我在某处出错了 class ColourRender extends DefaultTable
我创建了自己的 CellRenderer,它在 JList 项中包含一些字符串和一个 JProgressBar ...但是 JProgressBar 和整个 JList 项将绘制一次,我正在寻找一种重
我正在尝试实现一个根据整数值改变颜色的单元渲染器。然而,细胞的颜色仅在聚焦时才会改变。见下图。 @Override public Component getTableCellRendererCompo
我已经尝试了一段时间并在互联网上寻找解决方案,但我失败了。我想做的是动态更改 Jtable 的行背景。我创建了 arrayList,它保留所选行的数量(每次用户按 alt+单击单元格时添加它们)并在我
这个问题已经有答案了: Coloring particular rows according to the first column values in JTable? (1 个回答) 已关闭 9 年
我有一个JTable,每次选择一个单元格时,我都想打印它的行和列索引。由于这个原因,我使用 getSelectedRow() 和 getSelectedColumn() 方法。运行下面的代码: 测试时
我有一个 gtk.TreeViewColumn,其中包含 14 个 gtk.CellRendererPixbuf 属性。其中大多数大部分时间都是空的(关联的 TreeStore 值为 None)。 这
简单来说:为什么下面的小例子在树形控件的第三项上没有显示浅灰色背景? 代码创建了一个 JTree,用三个字符串填充它(直接传递给构造函数)并重写 getCellRenderer() 方法以返回自定义
我使用 cellRenderer 来更改单元格(列)背景颜色,但它也会将单元格值格式更改为图像上的左列,我会将默认格式保留为图像上的右列,这里是我的简单代码: DefaultTableCellRend
在我的 PyGTK 应用程序中,我目前使用“可编辑”来使单元格可编辑。但是由于我的单元格内容有时真的非常大,所以我想在用户双击单元格时要求用户在新窗口中进行更改。但我无法找到如何 Hook 双击特定的
我用组合框制作了一个用户界面。我正在使用glade,所以我在运行时执行以下操作 combo_box.set_model(liststore) cell = gtk.CellRendererText()
我有一个表格,我的列在其中动态扩展。最初我将表模型设置为有 5 列,因为基本信息有 5 列。在 5 列中,第 2 列和第 3 列是按钮(实际上它们是按钮形式的超链接),这意味着我已将第 2 列和第 3
我正在使用 Itext7 创建一个包含表格的 pdf。 表格占多页。 我还重写了单元格渲染器以将表单域添加到某些单元格。 我注意到当表格转到新页面时,第一行不会触发 CellRender 类的 dra
我有一个内联 cellRenderer 可以修改单元格值,如下所示: cellRenderer: function (params) { if(params.value) { return
我创建了扩展 JTable 的 ColumnAutofitTable,引用 http://tips4java.wordpress.com/2008/11/10/table-column-adjuste
所以我一直在尝试使用教程中的示例并对其进行更改,以使其适合我的程序。getColumnValue 方法返回保存应显示信息的对象。这是要走的路还是应该返回要显示的实际字符串。我想不是,因为这样我会将演示
我有一个带有 cellrenderer 的 JTable,我的表是不可编辑的。当我选择一个单元格并复制 (ctrl-c) 值时,它的复制不是单元格中显示的,而是复制存储在模型中的值。如何复制表格中显示
嗨,我已经创建了自己的渲染器。我希望背景应该是蓝色的。我也将背景颜色设置为蓝色。但我不知道我的渲染器的背景颜色似乎总是白色是什么问题。 我已经发布了代码。请帮助我错误的地方,使背景颜色变成白色。 cl
//新手问题 我有一个带有几乎基本单元格渲染器的 JTable(它以不同的方式为线条着色)。我注意到我的单元格渲染器一直在为屏幕上显示的行运行,即使我没有对表格做任何事情。 事情就该这样吗?它不应该对
我正在尝试为 JTable 的特定列获取自定义工具提示。我已经创建了一个 CellRenderer(其中我已经成功地更改了其他特定于单元格的属性): private class CustomCellR
我是一名优秀的程序员,十分优秀!