【问题标题】:How to make a list of children widgets on a layout in QT?如何在 QT 的布局上制作子小部件列表?
【发布时间】:2013-09-16 11:42:21
【问题描述】:

一个很好的简单例子会很好。就我而言,我希望做这样的事情:

myLayout->addWidget(myButton1);
myLayout->addWidget(myButton2);

myButtonList<QToolButtons*>->append(myLayout->findChildren(QToolButtons));

myButtonList->at(1)->setText("This is 'myButton2'");

【问题讨论】:

  • myLayout-&gt;itemAt(1)-&gt;widget()-&gt;setText("..."); 只是转换widget()的结果

标签: qt qlist


【解决方案1】:

将 QList 与 findChildren 与 QWidget 一起使用,因为 QLayout 不会将 QWidgets 显示为其子级,并且 QWidget 仅具有父级 QWidget。 Refer this

QWidget w;
QPushButton *p1= new QPushButton;
QPushButton *p2= new QPushButton;
QHBoxLayout l;
l.addWidget(p1);
l.addWidget(p2);
w.setLayout(&l);
QList<QPushButton*> buttons = w.findChildren<QPushButton*>();
buttons.at(0)->setText("Hello I am P1"); 
buttons.at(1)->setText("Hello I am P2");
w.show();

【讨论】:

  • 这可能是我遇到的问题,试图直接在布局上找到孩子。好东西
  • 是的,我忘了,小部件是小部件的父级,而不是布局
【解决方案2】:

首先填充列表然后布局的方法会容易得多:

QList<QToolButton *> list;
list.append(new QToolButton);
list.last().setText("1");

myLayout->addWidget(list.last());

这也可以很容易地循环使用更多的按钮。

你仍然可以使用

ParentWidget->findChildren<QToolButtons *>();

已编辑给定的父级 vahancho 提示始终是小部件,而不是布局

【讨论】:

  • 虽然我的布局上的内容发生了变化,但你确实给了我一个想法;我用来将小部件移动到布局上的信号,我也会将它们添加到列表中。
  • myLayout-&gt;findChildren&lt;QToolButtons *&gt;(); 是否有效? findChildren() 不是 QObject 而不是 QLayout 类的函数成员吗?
  • 你是对的,需要使用 parentwidget,而不是布局。谢谢 vahancho
猜你喜欢
  • 1970-01-01
  • 2014-08-12
  • 1970-01-01
  • 1970-01-01
  • 2014-12-17
  • 1970-01-01
  • 2011-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多