Qt报错:Ui::StartScreen类无lbl_gif成员,排查无果求助
Qt编译报错:Ui::StartScreen类无lbl_gif成员
问题详情
翻了不少论坛,确认不是拼写错误或.ui文件未定义的问题。在Qt Creator设计面板给StartScreen窗体添加了名为lbl_gif的标签,但在.cpp文件中引用该标签设置文本、添加动画均失败。试过清理项目、重建、重启Qt、删除重加标签等操作,Qt始终无法识别该窗体新增的任何标签,其他窗体添加标签则正常。智能提示能自动补全lbl_gif,但编译直接报错。
错误信息
C:\Users\user\OneDrive\Desktop\project\screens\startscreen.cpp:30: error: 'class Ui::StartScreen' has no member named 'lbl_gif' ..\screens\startscreen.cpp: In constructor 'StartScreen::StartScreen(QWidget*)': ..\screens\startscreen.cpp:30:9: error: 'class Ui::StartScreen' has no member named 'lbl_gif' 30 | ui->lbl_gif->setText("testing"); | ^~~~~~~~~~~~~~~~~~~~~~~
StartScreen构造器代码
// Constructor StartScreen::StartScreen(QWidget *parent) : QMainWindow(parent), ui(new Ui::StartScreen) { // Setup the mainwindow ui->setupUi(this); setWindowTitle("title"); // Load logo QString path = R"(C:/Users/user/OneDrive/Desktop/project/logos/8bitlogo.png)"; QPixmap img(path); img = img.scaled(img.size()*.9, Qt::KeepAspectRatio); ui->lbl_logo->setPixmap(img); // Load gif QMovie *movie = new QMovie("C:/Users/user/OneDrive/Desktop/project/logos/knight.gif"); ui->lbl_gif->setText("testing"); movie->start(); this->show(); }
StartScreen.ui片段
<layout class="QVBoxLayout" name="verticalLayout_6" stretch="0,2,2,2,2,2"> <item> <widget class="QLabel" name="lbl_gif"> <property name="text"> <string>TextLabel</string> </property> </widget> </item>
解决方法
- 直接删除项目的构建目录,不要依赖Qt Creator的清理功能,删完重新构建。旧的生成文件残留会导致新UI修改不生效。
- 检查
.pro文件的FORMS条目,确认StartScreen.ui的路径正确,比如FORMS += screens/StartScreen.ui,路径错误会导致UI文件没被编译。 - 手动查看构建目录下的
ui_StartScreen.h文件,确认里面是否有lbl_gif的成员定义。如果没有,说明.ui文件没被正确编译,试试把项目从OneDrive同步目录移到本地普通目录,避免文件被锁定。 - 执行菜单栏的构建->重新运行qmake,再重新构建。qmake负责生成Makefile,有时UI修改没触发qmake更新。
- 检查
ui_StartScreen.h中的类命名,确认是Ui::StartScreen,没有和其他类重名冲突。
内容的提问来源于stack exchange,提问作者catfriendly
相关产品推荐
相关产品推荐

