GtkTreeView 交替行颜色
GtkTreeView alternate row color
本文关键字:颜色 GtkTreeView 更新时间:2023-10-16
我无法设置 TreeView 的交替行颜色,我不知道为什么不起作用。
这是代码
MainWindow::MainWindow(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>& refGlade) :
Gtk::ApplicationWindow(cobject), refBuilder(refGlade){
Glib::RefPtr<Gtk::CssProvider> cssProvider = Gtk::CssProvider::create();
cssProvider->load_from_path("style.css");
Glib::RefPtr<Gtk::StyleContext> styleContext = Gtk::StyleContext::create();
Glib::RefPtr<Gdk::Screen> screen = Gdk::Screen::get_default();
styleContext->add_provider_for_screen(screen, cssProvider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
const char* user = "user";
const char* passwd = "passwd";
const char* database = "dbname";
const char* dbhost = "192.168.1.5";
connection = mysql_init(NULL);
mysql_real_connect(connection, dbhost, user, passwd, database, 3307, NULL, 0);
refBuilder->get_widget("m_TreeView1", m_TreeView1);
m_refTreeModel = Gtk::ListStore::create(m_Columns);
m_TreeView1->set_model(m_refTreeModel);
/*Glib::RefPtr<Gtk::StyleContext> context = m_TreeView1->get_style_context();
context->add_class("treeview");
*/
Affitto* affitti = new Affitto(connection);
MYSQL_RES* res = affitti->getAll();
MYSQL_ROW riga;
Gtk::TreeModel::Row row;
while ((riga = mysql_fetch_row(res)))
{
row = *(m_refTreeModel->append());
row[m_Columns.m_col_inqid] = std::stoi(riga[0]);
row[m_Columns.m_col_cognomenome] = riga[1];
row[m_Columns.m_col_stabile] = riga[2];
row[m_Columns.m_col_mese] = std::stoi(riga[3]);
row[m_Columns.m_col_anno] = std::stoi(riga[4]);
row[m_Columns.m_col_posteggiopagato] = std::stod(riga[5]);
row[m_Columns.m_col_affittopagato] = std::stod(riga[6]);
row[m_Columns.m_col_riscaldamentopagato] = std::stod(riga[7]);
row[m_Columns.m_col_pagatoil] = riga[8];
row[m_Columns.m_col_stato] = riga[9];
row[m_Columns.m_col_osservazioni] = riga[10];
row[m_Columns.m_col_traslocato] = riga[11];
row[m_Columns.m_col_diversi] = std::stod(riga[12]);
row[m_Columns.m_col_affitto] = std::stod(riga[13]);
row[m_Columns.m_col_posteggio] = std::stod(riga[14]);
row[m_Columns.m_col_riscaldamento] = std::stod(riga[15]);
}
m_TreeView1->append_column("InqID", m_Columns.m_col_inqid);
m_TreeView1->append_column("Cognome e nome", m_Columns.m_col_cognomenome);
//m_TreeView1->get_column(1)->set_expand(true);
m_TreeView1->append_column("Stabile", m_Columns.m_col_stabile);
m_TreeView1->append_column("Mese", m_Columns.m_col_mese);
m_TreeView1->append_column("Anno", m_Columns.m_col_anno);
m_TreeView1->append_column("Posteggio pagato", m_Columns.m_col_posteggiopagato);
m_TreeView1->append_column("Affitto pagato", m_Columns.m_col_affittopagato);
m_TreeView1->append_column("Riscaldamento pagato", m_Columns.m_col_riscaldamentopagato);
m_TreeView1->append_column("Pagato il", m_Columns.m_col_pagatoil);
m_TreeView1->append_column("Stato", m_Columns.m_col_stato);
m_TreeView1->append_column("Osservazioni", m_Columns.m_col_osservazioni);
m_TreeView1->append_column("Traslocato", m_Columns.m_col_traslocato);
m_TreeView1->append_column("Diversi", m_Columns.m_col_diversi);
m_TreeView1->append_column("Affitto", m_Columns.m_col_affitto);
m_TreeView1->append_column("Posteggio", m_Columns.m_col_posteggio);
m_TreeView1->append_column("Riscaldamento", m_Columns.m_col_riscaldamento);
mysql_free_result(res);
mysql_close(connection);
}
这是正确加载的 css。我在 glade 文件中设置了树视图(树视图(的样式类。
.treeview row:nth-child(even)
{
background-color: #ff0000;
}
.treeview row:nth-child(odd)
{
background-color: #000000;
}
怎么了?我也尝试通过代码(注释行(设置样式类,但没有改变。 提前感谢您的帮助!
更新
我把更新的代码放了,我错了什么?
Gtk::CellRendererText* textRenderer = manage(new Gtk::CellRendererText());
textRenderer->property_editable() = false;
Gtk::TreeViewColumn *col = manage(new Gtk::TreeViewColumn("InqId", *textRenderer));
col->add_attribute(*textRenderer, "cell-background-rgba", m_Columns.m_col_inqid);
m_TreeView1->append_column(*col);
while ((riga = mysql_fetch_row(res)))
{
row = *(m_refTreeModel->append());
row[m_Columns.m_col_inqid] = std::stoi(riga[0]);
row[m_Columns.m_col_inqid] = Gdk::Color("#CCCCCC");
}
提前感谢!
如果要设置行的背景颜色,可以使用
cell-background-gdk
您可以在此处阅读更多相关信息
其他人已经遇到了同样的问题:
也许你可以做一个功能,你抓住一行的每个单元格并使用 已经提到的功能或在单元格创建时执行此操作,如下所示:
行背景颜色 gtk树视图小部件
注意,他只是对颜色使用了错误的函数:
谢谢@ivo,我使用了错误的属性,我需要 "cell-background-gdk"而不是"background-gdk"。感谢您的帮助。
使用cell-background-rgba函数代替之前提到的cell-background-gdk,因为它已被弃用,迟早会被删除。
所以,现在它可以工作了...这是完整的代码,以防有人遇到同样的问题。 非常感谢那些帮助我的人!
模型:
class MainWindow : public Gtk::ApplicationWindow
{
public:
MainWindow(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>& refGlade);
virtual ~MainWindow();
MYSQL* connection;
protected:
Glib::RefPtr<Gtk::Builder> refBuilder;
class ModelColumns : public Gtk::TreeModel::ColumnRecord
{
public:
ModelColumns()
{
add(m_col_inqid);
add(m_col_cognomenome);
add(m_col_stabile);
add(m_col_mese);
add(m_col_anno);
add(m_col_posteggiopagato);
add(m_col_affittopagato);
add(m_col_riscaldamentopagato);
add(m_col_pagatoil);
add(m_col_stato);
add(m_col_osservazioni);
add(m_col_traslocato);
add(m_col_diversi);
add(m_col_affitto);
add(m_col_posteggio);
add(m_col_riscaldamento);
add(m_coloreriga);
}
Gtk::TreeModelColumn<int> m_col_inqid;
Gtk::TreeModelColumn<std::string> m_col_cognomenome;
Gtk::TreeModelColumn<std::string> m_col_stabile;
Gtk::TreeModelColumn<int> m_col_mese;
Gtk::TreeModelColumn<int> m_col_anno;
Gtk::TreeModelColumn<double> m_col_posteggiopagato;
Gtk::TreeModelColumn<double> m_col_affittopagato;
Gtk::TreeModelColumn<double> m_col_riscaldamentopagato;
Gtk::TreeModelColumn<std::string> m_col_pagatoil;
Gtk::TreeModelColumn<std::string> m_col_stato;
Gtk::TreeModelColumn<std::string> m_col_osservazioni;
Gtk::TreeModelColumn<std::string> m_col_traslocato;
Gtk::TreeModelColumn<double> m_col_diversi;
Gtk::TreeModelColumn<double> m_col_affitto;
Gtk::TreeModelColumn<double> m_col_posteggio;
Gtk::TreeModelColumn<double> m_col_riscaldamento;
Gtk::TreeModelColumn<Gdk::RGBA> m_coloreriga;
};
ModelColumns m_Columns;
Gtk::TreeView* m_TreeView1;
Glib::RefPtr<Gtk::ListStore> m_refTreeModel;
};
主要:
MainWindow::MainWindow(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>& refGlade) :
Gtk::ApplicationWindow(cobject), refBuilder(refGlade){
Glib::RefPtr<Gtk::CssProvider> cssProvider = Gtk::CssProvider::create();
cssProvider->load_from_path("style.css");
//cssProvider->load_from_data(cssProvider, ".treeview row:nth-child(even){ background-color: #ff0000; } .treeview row:nth-child(odd){ background-color: #000000; }", -1, NULL);
Glib::RefPtr<Gtk::StyleContext> styleContext = Gtk::StyleContext::create();
Glib::RefPtr<Gdk::Screen> screen = Gdk::Screen::get_default();
styleContext->add_provider_for_screen(screen, cssProvider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
const char* user = "root";
const char* passwd = "";
const char* database = "";
const char* dbhost = "192.168.1.5";
connection = mysql_init(NULL);
mysql_real_connect(connection, dbhost, user, passwd, database, 3307, NULL, 0);
refBuilder->get_widget("m_TreeView1", m_TreeView1);
//m_Button_Quit.signal_clicked().connect( sigc::mem_fun(*this, &MainWindow::on_button_quit) );
m_refTreeModel = Gtk::ListStore::create(m_Columns);
m_TreeView1->set_model(m_refTreeModel);
Affitto* affitti = new Affitto(connection);
MYSQL_RES* res = affitti->getAll();
MYSQL_ROW riga;
Gtk::TreeModel::Row row;
Gtk::CellRendererText* textRenderer = manage(new Gtk::CellRendererText());
Gtk::TreeViewColumn *col = manage(new Gtk::TreeViewColumn("InqId", *textRenderer));
col->add_attribute(*textRenderer, "cell-background-rgba", m_Columns.m_coloreriga);
m_TreeView1->append_column(*col);
textRenderer = manage(new Gtk::CellRendererText());
col = manage(new Gtk::TreeViewColumn("Cognome e nome", *textRenderer));
col->add_attribute(*textRenderer, "cell-background-rgba", m_Columns.m_coloreriga);
m_TreeView1->append_column(*col);
m_TreeView1->append_column("Stabile", m_Columns.m_col_stabile);
m_TreeView1->append_column("Mese", m_Columns.m_col_mese);
m_TreeView1->append_column("Anno", m_Columns.m_col_anno);
m_TreeView1->append_column("Posteggio pagato", m_Columns.m_col_posteggiopagato);
m_TreeView1->append_column("Affitto pagato", m_Columns.m_col_affittopagato);
m_TreeView1->append_column("Riscaldamento pagato", m_Columns.m_col_riscaldamentopagato);
m_TreeView1->append_column("Pagato il", m_Columns.m_col_pagatoil);
m_TreeView1->append_column("Stato", m_Columns.m_col_stato);
m_TreeView1->append_column("Osservazioni", m_Columns.m_col_osservazioni);
m_TreeView1->append_column("Traslocato", m_Columns.m_col_traslocato);
m_TreeView1->append_column("Diversi", m_Columns.m_col_diversi);
m_TreeView1->append_column("Affitto", m_Columns.m_col_affitto);
m_TreeView1->append_column("Posteggio", m_Columns.m_col_posteggio);
m_TreeView1->append_column("Riscaldamento", m_Columns.m_col_riscaldamento);
int i=0;
while ((riga = mysql_fetch_row(res)))
{
row = *(m_refTreeModel->append());
row[m_Columns.m_col_inqid] = std::stoi(riga[0]);
row[m_Columns.m_col_cognomenome] = riga[1];
row[m_Columns.m_col_stabile] = riga[2];
row[m_Columns.m_col_mese] = std::stoi(riga[3]);
row[m_Columns.m_col_anno] = std::stoi(riga[4]);
row[m_Columns.m_col_posteggiopagato] = std::stod(riga[5]);
row[m_Columns.m_col_affittopagato] = std::stod(riga[6]);
row[m_Columns.m_col_riscaldamentopagato] = std::stod(riga[7]);
row[m_Columns.m_col_pagatoil] = riga[8];
row[m_Columns.m_col_stato] = riga[9];
row[m_Columns.m_col_osservazioni] = riga[10];
row[m_Columns.m_col_traslocato] = riga[11];
row[m_Columns.m_col_diversi] = std::stod(riga[12]);
row[m_Columns.m_col_affitto] = std::stod(riga[13]);
row[m_Columns.m_col_posteggio] = std::stod(riga[14]);
row[m_Columns.m_col_riscaldamento] = std::stod(riga[15]);
if(i%2 == 0)
row[m_Columns.m_coloreriga] = Gdk::RGBA("#ff0000");
else
row[m_Columns.m_coloreriga] = Gdk::RGBA("#cccccc");
i++;
}
mysql_free_result(res);
mysql_close(connection);
}
相关文章:
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 如何在内核C++中使用1920x1080x16M图形或类似的16M颜色?(VGA)
- 如何在24位SDL_Surface上设置像素的颜色
- 如何从SDL_Surface获取特定像素的颜色
- 列表视图更改选择颜色
- GtkTreeView 交替行颜色
- dx11 渲染到纹理仅显示透明颜色
- 使用 OpenGL 4.5 更改所选顶点的颜色
- 为什么我的 LEGACY OPENGL 颜色反转了?
- 双击更改 mfc 中列表控件中的行的颜色
- 更改 QT 中按钮的颜色
- 当我使用CHAR_INFO结构时,控制台会无缘无故地改变颜色
- 列表视图项的替代颜色
- GLSL 将 uint 转换为浮点颜色
- std::带有颜色和标题的 clog 包装器无法正确打印整数
- Vec3b:r/g/b 颜色的最大值为 254,而不是 255
- 如何将矢量对象更改为不同的颜色?
- PPM 颜色显示错误
- 如何更改 QGraphicsItem 对象的颜色?
- 如何防止每次 Arduino 启动时颜色数组都是相同的随机数组