qtcreator中debug后出现button was not declared

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qtcreator中debug后出现button was not declared相关的知识,希望对你有一定的参考价值。

本人初学QT4,qt creator建立工程的时候选择默认的qt gui application,然后用qt designer 设计此工程中的ui图,完成后在qt creator中的main函数里只写入:QObject::connect(
button,SIGNAL(clicked()),&a,SLOT(quit())),debug后出现button was not declared。ps:我已经在qtdesigner里把拖拽的pushbutton改名叫做button了。为什么还出现这个情况?
我创建了俩lcd,和两个slider。改名叫lcd1,lcd2,slider1,slider2。

然后我在main函数里面如几位回答那样设一个ui,但是debug的时候就会出下这个,通不过。为什么呢?怎么改啊。谢啦

qtcreator 对于资源的使用方式是单一继承方式,所以使用button时,必须确认button属于你所调用的类内部或者有成员包含button,你看qtcreator的mainwindow.h里边是不是有这么一句private: Ui::MainWindow*ui; 这个是为了获得资源类而添加的私有成员,所以对资源类属性的访问都必须用ui变量调用。追问

帮我看看上面这俩图,谢谢啦

参考技术A button是属于ui类的一个成员变量,在main函数里面调用它需要通过你建立的ui类的对象;
比如你的ui类名是MYUI则应该这样写
MYUI *ui = new MYUI;
QObject::connect(ui->button,SIGNAL(clicked()),&a,SLOT(quit()));追问

原来是这样,那我从哪看我建立的ui类名呢?(就是你说的MYUI)建立工程的时候没记得自己设过这个类名啊,谢谢啦

追答

你这个里面mainwindow就是;
你把Ui::MainWindow *ui = new Ui::MainWindow;去掉
然后把里面的ui全部改成w;

追问

注释掉ui那行,将ui->均改为w.后编译出现这么一堆未定义。。这是为啥啊

追答

把你的mainwindow的头文件贴过来我看看

追问

追答

 你把你的和界面操作相关的初始化的东西都放到MainWindow的构造函数里面;就是下面的这些

可以不变的放到里面,然后在主函数里面吧这些东西去掉;只保留下面几句

QApplacation a(argv,argc);

MainWindow w;

w.show;

return a.exec();

因为MainWindow类就是你的处理界面的类;界面的初始化,对应的操作的槽函数在里面定义比较好;

QTcreator自动生成的界面类都是单继承ui累的;如果用多继承方式建立界面处理类;你上次的写法是没有问题的,单继承的界面控件都需要通过界面处理类(MainWindow)的私有成员变量ui来调用;

你可以看看QT界面设计的两重继承方式

本回答被提问者采纳

QTCreator .pro 文件:根据 DEBUG / RELEASE 设置 LIBS 路径

【中文标题】QTCreator .pro 文件:根据 DEBUG / RELEASE 设置 LIBS 路径【英文标题】:QTCreator .pro file: Setting LIBS path depending on DEBUG / RELEASE 【发布时间】:2012-07-23 11:13:33 【问题描述】:

作为 Qt 的新手,我正在编写一个依赖于另一个项目的小项目,该项目位于并行目录中。

在我的.pro 文件中,一些.obj 文件包含如下(有效)。但是,在创建版本时,我想使用其他项目的版本,而不是它的调试路径。我检查了Qt variables 并找到了“目标示例”。但是我没有将它应用到我的LIBS,特别是因为构建可以同时用于debug_and_release,我不知道如何编写LIBS 路径。

专业文件:

LIBS += -L"../../OtherApp/OtherApp-build-desktop-Qt_4_8_1_for_Desktop_-_MSVC2010__Qt_SDK__Debug/debug"
LIBS += http.obj some other obj files

“目标示例”:

 build_pass:CONFIG(debug, debug|release) 
 unix: TARGET = $$join(TARGET,,,_debug)
 else: TARGET = $$join(TARGET,,,d)
 

我可以写LIBS += -L"......."$$(TARGET)"......",特别是如果目标可能同时包含调试和发布?

[编辑 1] 我找到了解决方案:https://***.com/a/11612903/356726

【问题讨论】:

【参考方案1】:

通过使用向导(包括内部库),我创建了以下“代码”。这很可能是解决方案:

win32:CONFIG(release, debug|release): LIBS += -LLIBS += -L"../../MyApp/current/MyApp-build-desktop-Qt_4_8_1_for_Desktop_-_MSVC2010__Qt_SDK__Release/release"
else:win32:CONFIG(debug, debug|release): LIBS += -L"../../MyApp/current/MyApp-build-desktop-Qt_4_8_1_for_Desktop_-_MSVC2010__Qt_SDK__Debug/debug"

【讨论】:

以上是关于qtcreator中debug后出现button was not declared的主要内容,如果未能解决你的问题,请参考以下文章

Qt编译目录下exe文件执行报错问题的解决办法

让QtCreator在调试时显示字符串 Qt调试助手 QtDebuggingHelper qtc-debugging-helper

关于QtCreator中三种不同编译版本 debugreleaseprofile 的区别

windows10环境下QtCreator中出现skipping incompatible xxx when searching for xxx 问题解决办法

在QtCreator 2.1.0 下使用opencv231库加载图片并显示

错误记录Java AWT 图形界面编程界面中出现中文乱码 ( Run/Debug Configurations 对话框 VM options 中设置 -Dfile.encoding=gbk )