【Qt】对象树与坐标系


需要云服务器等云产品来学习Linux的同学可以移步/-->腾讯云<--/-->阿里云<--/-->华为云<--/官网,轻量型云服务器低至112元/年,新用户首次下单享超低折扣。


目录

 一、Qt Creator快捷键

二、对象树

1、对象树的析构

2、自定义类的编写

三、使用控件显示hello world

1、QLineEdit(单行文本输入框)

2、PushButton(按钮)

两种控制控件的方式

四、Qt窗口坐标体系


 一、Qt Creator快捷键

• 注释:ctrl + /

• 运行:ctrl + R

• 编译:ctrl + B

• 字体缩放:ctrl + 鼠标滑轮

• 查找:ctrl + F

• 整行移动:ctrl + shift + ⬆/⬇

• 帮助文档:鼠标定位+F1

• 自动对齐:ctrl + i

• 同名之间的 .h 和 .cpp 的切换:F4

• 生成函数声明的对应定义: alt + enter

• ctrl +鼠标左键跳转定义 ,Alt+⬅️跳转回来

二、对象树

1、对象树的析构

QLabel* label = new QLabel(this);

因为对象树,上述代码不主动调用delete,label对象在窗口关闭的时候会被析构释放。

如果这个变量是在栈上创建的,就可能出现“控件被提前释放的问题”,这也是Qt喜欢在堆区申请空间的原因。

2、自定义类的编写

编写一个自定义类,需要在其构造函数中,指定父对象,这样通过自定义类构造的对象才会被挂到对象树上。(如果对象没有挂到对象树上,就必须手动释放资源,防止资源泄漏)

通过继承Qt内置的类,就可以达到对现有控件功能进行扩展。(继承后重写类方法)

三、使用控件显示hello world

1、QLineEdit(单行文本输入框)

2、PushButton(按钮)

代码中通过这个objectName来对控件进行控制。(ui->objectName来控制)

void Widget::HandleClick()
{
    if (ui->pushButton->text() == QString("hello world")){
        ui->pushButton->setText("hello qt"); // 点击按钮后,变为hello qt
    }
    else {
        ui->pushButton->setText("hello world"); // 点击按钮后,变为hello world
    }
}

两种控制控件的方式

四、Qt窗口坐标体系

坐标体系:以左上角为原点(0,0),X向右增加,Y向下增加。

Qt某个控件的坐标原点,由其父控件决定:

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Qt 中创建一个三维坐标系可以使用 Qt 3D 模块。以下是一个简单的示例代码来创建一个基本的三维坐标系: ```cpp #include <Qt3DCore/QEntity> #include <Qt3DCore/QTransform> #include <Qt3DExtras/QPhongMaterial> #include <Qt3DExtras/QCylinderMesh> #include <Qt3DExtras/QSphereMesh> #include <Qt3DExtras/QForwardRenderer> #include <Qt3DExtras/QFirstPersonCameraController> #include <Qt3DExtras/Qt3DWindow> int main(int argc, char *argv[]) { // 创建 Qt 应用程序 QApplication app(argc, argv); // 创建 Qt3D 窗口 Qt3DExtras::Qt3DWindow view; // 创建场景根实体 Qt3DCore::QEntity sceneRoot; // 创建 X 轴实体 Qt3DCore::QEntity xArrowEntity; Qt3DExtras::QPhongMaterial *xArrowMaterial = new Qt3DExtras::QPhongMaterial(); xArrowMaterial->setDiffuse(QColor(Qt::red)); Qt3DCore::QTransform *xArrowTransform = new Qt3DCore::QTransform(); xArrowTransform->setTranslation(QVector3D(1, 0, 0)); xArrowTransform->setScale(0.1f); Qt3DExtras::QCylinderMesh *xArrowMesh = new Qt3DExtras::QCylinderMesh(); xArrowMesh->setRadius(0.02f); xArrowMesh->setLength(0.9f); xArrowEntity->addComponent(xArrowMaterial); xArrowEntity->addComponent(xArrowTransform); xArrowEntity->addComponent(xArrowMesh); xArrowEntity->setParent(&sceneRoot); // 创建 Y 轴实体 Qt3DCore::QEntity yArrowEntity; Qt3DExtras::QPhongMaterial *yArrowMaterial = new Qt3DExtras::QPhongMaterial(); yArrowMaterial->setDiffuse(QColor(Qt::green)); Qt3DCore::QTransform *yArrowTransform = new Qt3DCore::QTransform(); yArrowTransform->setTranslation(QVector3D(0, 1, 0)); yArrowTransform->setScale(0.1f); Qt3DExtras::QCylinderMesh *yArrowMesh = new Qt3DExtras::QCylinderMesh(); yArrowMesh->setRadius(0.02f); yArrowMesh->setLength(0.9f); yArrowEntity->addComponent(yArrowMaterial); yArrowEntity->addComponent(yArrowTransform); yArrowEntity->addComponent(yArrowMesh); yArrowEntity->setParent(&sceneRoot); // 创建 Z 轴实体 Qt3DCore::QEntity zArrowEntity; Qt3DExtras::QPhongMaterial *zArrowMaterial = new Qt3DExtras::QPhongMaterial(); zArrowMaterial->setDiffuse(QColor(Qt::blue)); Qt3DCore::QTransform *zArrowTransform = new Qt3DCore::QTransform(); zArrowTransform->setTranslation(QVector3D(0, 0, 1)); zArrowTransform->setScale(0.1f); Qt3DExtras::QCylinderMesh *zArrowMesh = new Qt3DExtras::QCylinderMesh(); zArrowMesh->setRadius(0.02f); zArrowMesh->setLength(0.9f); zArrowEntity->addComponent(zArrowMaterial); zArrowEntity->addComponent(zArrowTransform); zArrowEntity->addComponent(zArrowMesh); zArrowEntity->setParent(&sceneRoot); // 设置场景根实体为视图的根实体 view.setRootEntity(&sceneRoot); // 设置摄像机控制器 Qt3DExtras::QFirstPersonCameraController *cameraController = new Qt3DExtras::QFirstPersonCameraController(&sceneRoot); cameraController->setCamera(view.camera()); // 显示窗口 view.show(); // 运行应用程序 return app.exec(); } ``` 这是一个简单的示例,它创建了一个带有红色、绿色和蓝色箭头的三维坐标系。你可以根据需要调整箭头的大小、颜色等属性。记得在项目文件中添加 `QT += 3dextras` 来启用 Qt 3D 模块。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蒋灵瑜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值