如何解决如何计算存储在 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
这些方法返回的正是你想要的:一个小部件向量。您可以在返回的 std::vector
上使用 size()
来计算容器中的 wigets 数量。
另外,在我看来,Gtk::Box
很少有用,因为它非常有限。 Gtk::Grid
几乎总是更好的选择。
最后,在 Qt 中,所有图形元素都继承自 QWidget
。在 Gtkmm 中,所有小部件都继承自 Gtk::Widget
,这意味着您可以编写如下内容:
Gtk::Widget* pButton = new Gtk::Button("My button");
然后使用 pButton
,它“不受任何小部件类型的限制”。有关 Gtk::Widget
的详细信息,请参阅 the reference。
Gtkmm4 更新
似乎 Gtk::Container
已在 Gtkmm4 中删除,如记录的 here。似乎没有什么可以取代它。不幸的是,在这个版本中,子小部件跟踪似乎必须手动完成。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。