C++;Qt是如何工作的? 我试图找出如何从我的C++项目中的QT设计器窗体访问组件,没有编译错误,但运行时错误发生。
“main”函数和a.exec是如何工作的?我应该在.exec()之前执行代码还是创建一个新线程来执行C++;Qt是如何工作的? 我试图找出如何从我的C++项目中的QT设计器窗体访问组件,没有编译错误,但运行时错误发生。,c++,qt,qtgui,C++,Qt,Qtgui,“main”函数和a.exec是如何工作的?我应该在.exec()之前执行代码还是创建一个新线程来执行 QWidget *pWindow; QPushButton *lpPushButton; int main(int argc, char *argv[]) { QApplication a(argc, argv); QtProject w; w.show(); pWindow = QApplication::activeWindow(); lpPushButton
QWidget *pWindow;
QPushButton *lpPushButton;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QtProject w;
w.show();
pWindow = QApplication::activeWindow();
lpPushButton = pWindow->findChild<QPushButton*>("pushButton_2");;
lpPushButton->setText("test");
return a.exec();
}
QWidget*pWindow;
QPushButton*LPButton;
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
QTW项目;
w、 show();
pWindow=QApplication::activeWindow();
lpbutdown=pWindow->findChild(“按钮2”);;
lp按钮->设置文本(“测试”);
返回a.exec();
}
pWindow和LPINDOW按钮均为空
上面的代码不起作用,因为我不知道从哪里可以调用setText。
关于Qt如何工作的一点ELI5解释将非常好,谢谢。当您使用QtDesigner创建表单时,它将详细信息存储在一个
xxx.ui
文件中,该文件必须添加到您的项目中。这在预编译步骤中编译成一个ui\u xxx.h
文件,您必须将其包含在源文件中
此头文件包含一个生成的类,其中包含所有小部件和布局代码,并将其放入名为Ui
的命名空间中
使用这个生成的类有两个选项:可以从中派生,也可以将其作为成员。然后需要调用类“setupUi()
函数来执行创建/布局代码
从生成的类派生的优点是所有子窗口小部件都是公开可用的
例如,如果您在QtDesigner中创建一个简单的小部件表单,并将其称为MyWidget
,使用一个名为pushbutton_2
的QPushButton
,您可以使用以下代码创建表单:
#include "ui_mywidget.h"
#include <qwidget.h>
#include <qapplication.h>
class Widget : public QWidget, public Ui::MyWidget{
public:
Widget(QWidget *parent = 0):QWidget(parent){
setupUi(this);
}
};
int main(int argc, char **argv){
QApplication app(argc, argv);
Widget w;
w.show();
w.pushbutton_2->setText("test");
return app.exec();
}
在这种情况下,您将无法直接访问子窗口小部件。原因是,尽管在结构上,它们可能是Widget
的子对象,但保存它们的内存地址并用于创建它们的指针变量属于ui
,它是Widget
的私有成员
但是,如果您知道它们的对象名,您仍然可以使用
findChild()
函数访问它们。您会遇到什么运行时错误?访问冲突,但lpputton和pWindow都是空的。我已经多年没有做过任何Qt工作了。你没有为有效的“应用程序启动”注册一个处理程序吗?Qt是事件驱动的,在你进入事件循环后,你需要对事件做出反应来完成你的工作。为什么窗口会有一个按钮?我试过了,但我无法使用w.pushButton_2
访问任何子元素,但我可以这样做QPushButton*lpTestBtn=w.parent()->findChild(“TestBtn”);
我添加了第二种使用QtDesigner生成的类的方法。也许这就是您实现它们的方法。
class Widget : public QWidget{
public:
Widget(QWidget *parent = 0):QWidget(parent){
ui.setupUi(this);
}
private:
Ui::MyWidget ui;
};