【问题标题】:Retrieve QSlider child from a QGridLayout从 QGridLayout 中检索 QSlider 子项
【发布时间】:2018-05-20 10:46:25
【问题描述】:

我想访问我的 QGridLayout 中的 QSlider 的值,但我没有找到正确的命令。 我尝试的一个例子:

 QSlider* slider=ui->gridLayout->takeAt(1)->widget();

我得到的错误信息是:

无法在初始化中将 'QLayoutItem*' 转换为 'QSlider*'

是否有命令立即询问 QSlider 而不是小部件? 可以投吗?我试过了,但这也没有用。 我该如何解决这个问题?

【问题讨论】:

  • 试试:QSlider* slider = qobject_cast<QSlider *>(ui->gridLayout->takeAt(1)->widget());
  • 请注意QLayout::takeAt 从布局中删除指定的项目。你可能想要QLayout::itemAt
  • 谢谢,它成功了!

标签: qt children qtwidgets qgridlayout


【解决方案1】:

你可以使用QGridLayout::findChild<T>方法:

QSlider *slider = ui->gridLayout->findChild<QSlider *>("widget_name"); // Name is optional

或者

QList<QSlider*> sliders = ui->gridLayout->findChildren<QSlider *>();

正如 G.M 所指出的,QLayout::takeAt 用于安全地从 QLayout 中删除和返回一个小部件,所以不是你想要做的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    相关资源
    最近更新 更多