【问题标题】:Qt designer - generating UI dynamically / generating unique names?Qt 设计器 - 动态生成 UI/生成唯一名称?
【发布时间】:2026-02-09 19:45:01
【问题描述】:

我最近开始学习 Qt,我面临以下问题:


我想创建一个像棋盘的东西(空,暂时不用做任何事情) - 我画了一个简单的界面,但是中间我需要做一个棋盘本身(假设它将由小的 QTextBrowser 组成)。

问题是棋盘的大小必须由用户指定。因此,绘制 16 个字段并赋予它们唯一的 objectNames 很容易,但我不知道如何:

  1. “动态”生成这些字段
  2. 为它们生成唯一的名称,因此我以后可以在代码中引用它们,例如。 field_1_1、field_1_2、field_1_3

比提前,

【问题讨论】:

  • 他们为什么需要名字?
  • 为什么不使用简单的 QTableView 和它的行/列索引导航?几年前,我通过使用 tableview 和自定义单元格做了你想要的。
  • @Leon ...也许他们不必:D但我需要以某种方式在代码中更改它们以使用例如。设置样式表
  • 如果你要像那样硬编码field_1_1 我有个坏消息要告诉你。探索 Qt 提供的东西和技术,三思而后行,你需要实现什么以及 Qt 可以帮助你实现你的目标目标。

标签: c++ qt qt-designer qtwidgets


【解决方案1】:

所以我认为你想要的是一个二维的字段数组。这样您就可以在不知道名称的情况下引用正确的字段。

更具体地说,Qt 提供了QLayoutGrid,虽然它不是二维数组,但可以通过使用itemAtPosition 方法为您提供对小部件的网格访问

【讨论】:

  • 非常感谢,我已经按照你说的做了。问题是itemAtPosition返回的是QLayoutItem,而我的item是QTextBrowser类型的,那么有没有办法使用它们的功能呢?
  • 所以 QLayoutItem 有一个方法 widget(),不过你必须键入它