我有一个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。
答案 0 :(得分:7)
试试这个:
QLayoutItem* item = _ui.gridLayoutLeft->itemAtPosition(x, y);
QWidget* widget = item->widget();
QToolButton* button = dynamic_cast<QToolButton*>(widget);
在实际代码中不要忘记检查有效指针。