Qt - 坐标处的QGridLayout访问元素

时间:2014-08-29 19:13:44

标签: c++ qt

我有一个QGridLayout,其行和列的数量恒定,并且填充了QToolButton的实例。我想要做的是访问此布局中的对象,其位置由其坐标确定。 我知道有QGridLayout :: - > itemAtPosition(row,column)返回指向QLayoutItem的指针,但是一旦我将它转换为QToolButton(很明显),并尝试更改其中的内容我得到访问冲突异常。

这就是我尝试将QLayoutItem *投射到QToolButton *的方式:

QToolButton* button = dynamic_cast<QToolButton*>(_ui.gridLayoutLeft->itemAtPosition(x, y)); // gridLayoutLeft is of type QGridLayout*

static_cast给了我一个&#34;无效的类型转换&#34;错误。 可以做些什么来实现这种行为?

我使用VS 2013并提供最新的Qt。

1 个答案:

答案 0 :(得分:7)

试试这个:

QLayoutItem* item = _ui.gridLayoutLeft->itemAtPosition(x, y);
QWidget* widget = item->widget();
QToolButton* button = dynamic_cast<QToolButton*>(widget); 

在实际代码中不要忘记检查有效指针。