如何在Qt Creator调试时通过Locals窗口查看QStandardItemModel数据?
快速调试QStandardItemModel的实用方法
嘿,我刚好碰到过类似的Qt Creator调试QStandardItemModel的头疼问题,给你几个亲测好用的快速解决方案:
1. 换个表达式搞定Expressions窗口的取值问题
你之前试的myQStandardItemModel->item(0,0)->text()返回<no such value>,多半是因为调试器没法正确解析item()方法的符号(大概率是编译器优化搞的鬼)。换用data()方法的表达式试试:
myQStandardItemModel->data(myQStandardItemModel->index(0, 0)).toString()
这个表达式直接通过模型索引获取数据,绕过了item()方法的调试符号问题,在Qt 5.7这种版本的调试环境里基本都能正常返回值。
2. 启用Qt官方的GDB漂亮打印机
你关闭了“Load System GDB Pretty Printers”,但Qt本身有专门针对自家类的漂亮打印机,能让Locals窗口正确展示QStandardItemModel的内部数据:
- 找到Qt 5.7.0安装目录下的
qtcreator/share/qtcreator/debugger/printers文件夹(比如Windows下可能是C:\Qt\5.7\mingw53_32\qtcreator\share\qtcreator\debugger\printers) - 打开GDB的初始化文件(Linux是
~/.gdbinit,Windows是Qt Creator配置的GDB路径下的gdbinit),添加以下内容:
记得把source /path/to/qt5printers.py/path/to/换成你实际的qt5printers.py路径 - 重启Qt Creator重新调试,这时候Locals窗口应该就能展开QStandardItemModel,看到内部的items列表和具体数据了
3. 降低调试版本的编译器优化级别
如果你的项目调试版本开了-O1或更高的优化级别,编译器会砍掉很多调试符号,导致调试器认不出类的方法和成员。修改项目的.pro文件:
CONFIG(debug, debug|release) { QMAKE_CXXFLAGS += -O0 }
重新编译调试版本后,调试器能拿到更完整的符号信息,之前的item()->text()表达式说不定就能正常工作了。
4. 写个一次性调试辅助函数(不用重复编译)
要是以上方法都不生效,那就写个通用的调试辅助函数,只需要编译一次,之后就能在Expressions窗口反复调用:
#include <QStandardItemModel> #include <QString> #ifdef QT_DEBUG QString getModelItemText(QStandardItemModel* model, int row, int column) { if (!model) { return QStringLiteral("Model is null"); } QStandardItem* item = model->item(row, column); return item ? item->text() : QStringLiteral("Item is null"); } #endif
把这段代码加到项目里(比如一个通用的调试工具类中),编译一次调试版本后,直接在Expressions窗口调用:
getModelItemText(myQStandardItemModel, 0, 0)
这样就不用每次都加临时变量重新编译,调试时直接调用就能查看任意单元格的内容。
内容的提问来源于stack exchange,提问作者Everlearn
相关产品推荐
相关产品推荐

