gtkmm - 如何计算存储在 Gtk::Grid 中的小部件?
问题描述
我正在寻找与某些 QT 表达式等效的几种 gtkmm 方法/数据类型:
给定 QT 中的小部件容器(例如
QBoxLayout
),一个简单的方法调用count()
返回存储在给定容器中的小部件数量。交换 QBoxLayout 或任何 QT 小部件容器的最佳方式是Gtk::Grid
. 但是没有简单的方法可以获取其中的小部件数量。与 相同Gtk::Box
。我需要该方法来迭代存储在网格中的孩子:
for(auto& it : layouts) { //layouts is a vector of Gtk::Grids for(int i = 0; i < it->size(); ++i) { if(it->get_child_at(0, i)) { it->get_child_at(0, i)->set_visible((std::string(it->get_name())== StringID)); }
QT
QWidget
用作不受任何小部件类型(例如按钮或复选框..)限制的对象。这在 gtkmm 中是不可能的,因为小部件只能通过对小部件类型的引用来初始化。现在我正在寻找用 gtkmm 替换 QT 代码,它有一个小部件向量。我用 Gtk::Box 替换了 QWidgets。这是一个合理的替代吗?我在更换他们的规模时遇到了麻烦,最初是使用 处理的QSize
,期望两个数字“hight”和“lenght”。现在有一个Gtk::Scale
类,但它以不同的方式工作..
解决方案
所有 Gtkmm 容器(如Gtk::Grid
)都继承自Gtk::Container
,这使得以下方法可用:
std::vector<Widget*> get_children() // Non const: to modify the widgets
std::vector<const Widget*> get_children () const // const: for read operations
这些方法准确地返回你想要的:一个小部件向量。您可以使用size()
返回std::vector
来计算容器中的假发数量。
此外,在我看来,Gtk::Box
它很少有用,因为它非常有限。Gtk::Grid
几乎总是一个更好的选择。
最后,在 Qt 中,所有图形元素都继承自QWidget
. 在 Gtkmm 中,所有小部件都继承自Gtk::Widget
,这意味着您可以编写如下内容:
Gtk::Widget* pButton = new Gtk::Button("My button");
然后使用pButton
,它“不受任何小部件类型的限制”。有关更多信息,请参阅参考资料Gtk::Widget
。
Gtkmm4 更新
它似乎Gtk::Container
在 Gtkmm4 中被删除,如此处所述。似乎没有什么可以替代它。不幸的是,在这个版本中,子小部件跟踪必须手动完成。
推荐阅读
- visual-studio-code - 如何使用 Svelte-VSCcode 为 Braceless SASS 启用 Linting
- javascript - 从父子节点过滤后的数据排序结果意外
- python - 使用 Pytest 和 Tox 测试 Test 目录中的所有文件
- makefile - cmake 为 cmake_link_script 试运行
- r - purrr:map2 和 mutate 中的管道问题
- python - 如何通过在python中声明全局来从另一个函数调用变量?
- java - 如何使 showData() 为不同的数据类型提供单独的结果?
- c# - 如何使用 c# Visual Studio 更改 XML 文件中的值
- javascript - 如何使用变量作为选择器定位多个 div
- java - 无法将 java.lang.Class 隐式转换为 c# 对象