c++ - Qt - QGridLayout 访问坐标处的元素

标签 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 给我一个“无效的类型转换”错误。 可以做些什么来实现这种行为?

我正在使用带有最新 Qt 的 VS 2013。

最佳答案

试试这个:

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

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

关于c++ - Qt - QGridLayout 访问坐标处的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25574802/

相关文章:

c++ - 控制到达非空函数的结尾

C++ 在模板中使用运算符关键字?

linux - 在 QProcess 输出中保留 ANSI 转义序列

c++ - QT4中有QPath::Combine吗?

Qt,在不重新实现绘画的情况下删除选择的虚线矩形

c++ - 如何停止 Clion tab 键行为

c++ - 数组错误的初始值设定项太多

c# - 如何从 C++ 应用程序使用 .net web 服务?

c++ - OpenGL Qt : problem using framebuffers for bloom effect

c++ - 如何在 Qt .js 文件中使用 C++ 枚举?