c++ - 如何在 Qt 中循环控制多个小部件?
问题描述
在 MFC 中创建控件时(动态创建或使用 MFC 资源编辑器),每个控件都有一个唯一的资源 ID。因此,我在头文件中预定义了控件资源 ID,并GetDlgItem(int)
在需要多个控件操作时在 for 循环中使用了函数。
这是 MFC 示例:
// ResourceID.h
#define IDC_BTN1 WM_USER + 101
#define IDC_BTN2 WM_USER + 102
#define IDC_BTN3 WM_USER + 103
...
#define IDC_BTN10 WM_USER + 110
// When getting the checked state of buttons 1 to 10
for(int i = IDC_BTN1; i <= IDC_BTN10; i++)
((CButton*)GetDlgItem(i))->GetCheck();
现在我想在 Qt 中做同样的事情(批量处理多个小部件)。我使用Qt Designer放置了 10 个按钮(不是动态创建的)。但是,Qt 只能通过类似的对象访问ui->pushButton
,所以我无法通过循环控制多个小部件。
所以,我的问题是
- Qt小部件有可以顺序分配的ID,比如MFC的资源ID?
- 如何控制多个小部件?
- 我可以使用 QPushButton* 数组控制多个小部件,如下所示:
// in header
QPushButton *btnArr[10];
// in constructor
btnArr[0] = ui->btn1;
btnArr[1] = ui->btn2;
...
// control multiple widgets
for(QPushButton *btn : btnArr)
btn->hide();
它有效,但这是正确的方法吗?
解决方案
如果您的按钮在同一个父级中。您可以使用setObjectName方法来设置按钮的名称。
然后从父级,您可以使用findChild方法通过对象名称访问按钮。如果按钮名称在“button1”、“button2”之类的规则中......那么您可以轻松地循环访问按钮。
推荐阅读
- c# - 如何写入单独的 .csv 文件列?
- android - 使用 Android Retrofit 2 Httpok3 的空响应正文
- java - 我可以将 Netbeans 配置文件中的默认 JDK 设置为默认值吗?
- c# - DataGridView 日期时间列无法排序
- sql-server-2008-r2 - SQL Server exec 结果转换为变量
- postman - 如何将外部 javascript 模块导入邮递员?
- c++ - 计算周长和面积的程序不从 void 函数输出值
- c++ - CodeBlocks 中 hashlib++ 库的“没有这样的文件或目录”错误
- reactjs - 当类名不是静态的时,如何选择节点进行酶测试?
- php - 在 foreach 问题中更新或创建 Laravel Eloquent?