Qt

QWidgetQMainWindow 是 Qt 框架中的两个重要类,它们都用于创建图形用户界面(GUI),但有一些关键的区别:

QWidget

  • 基础类: QWidget 是 Qt 中所有用户界面对象的基类。它提供了一个基础的窗口部件,其他窗口部件(如按钮、文本框)都是从 QWidget 继承而来的。
  • 功能: QWidget 本身是一个通用的窗口部件,没有特别的窗口管理功能。它可以作为窗口的基础组件,也可以作为其他复杂组件的容器。
  • 布局管理: QWidget 提供了布局管理功能,可以使用布局管理器来控制其子部件的位置和大小。
  • 使用场景: 你可以将 QWidget 用作对话框、工具条、或是任何其他需要的窗口部件。如果你只需要一个简单的窗口,QWidget 是一个合适的选择。

QMainWindow

  • 派生类: QMainWindowQWidget 的子类,提供了更丰富的窗口功能和特性。
  • 功能: QMainWindow 是设计用于主窗口的类,它提供了菜单栏、工具栏、状态栏和中央窗口区域的支持。这使得它特别适合用于主应用窗口的设计。
  • 布局管理: QMainWindow 提供了特定的布局区域,如菜单栏、工具栏、状态栏和中央部件区域。你可以使用这些功能来创建更复杂的应用程序界面。
  • 使用场景: 当你需要一个具有菜单栏、工具栏和状态栏的主窗口时,QMainWindow 是一个理想的选择。它适合用于具有复杂界面的桌面应用程序。

主要区别总结

  1. 功能扩展:
    • QWidget: 基础窗口部件,功能较少,适合用于创建简单的窗口或部件。
    • QMainWindow: 提供额外的功能,如菜单栏、工具栏和状态栏,适合用于主应用窗口。
  2. 使用场景:
    • QWidget: 适合用作对话框、工具条、或简单的窗口部件。
    • QMainWindow: 适合用于需要复杂用户界面的主窗口。
  3. 布局支持:
    • QWidget: 你需要手动设置布局。
    • QMainWindow: 提供了内置的菜单栏、工具栏、状态栏和中央部件区域,可以直接使用这些功能来设计主窗口界面。

connect(menu, &QMenu::triggered, this, &Widget::onMenuTriggered); 为什么QMenu* menu;时不报错 当QMenu menu;时报错:No matching member function for call to ‘connect’

在 Qt 中,connect 函数的作用是将一个信号与一个槽函数连接起来。它依赖于信号发射的对象和槽函数的对象都是有效的,并且能够正确识别和匹配。

使用 QMenu* menu

QMenu* menu = new QMenu();
connect(menu, &QMenu::triggered, this, &Widget::onMenuTriggered);
  • 这里,menu 是一个指向 QMenu 对象的指针。
  • connect 函数可以使用 menu 指针来连接信号和槽,因为 QMenu 对象在堆上分配,并且其生命周期由指针管理。
  • QMenu 的实例通过指针能够正确地传递给 connect,并且 QMenu 的成员函数和信号可以被正确识别。

使用 QMenu menu

QMenu menu;
connect(menu, &QMenu::triggered, this, &Widget::onMenuTriggered);
  • 这里,menu 是一个栈上的 QMenu 对象。
  • 栈上的对象在 connect 时会导致问题,因为 connect 期望信号发射对象在其生命周期内有效。栈上的对象会在超出作用域时被销毁。
  • 在这个情况下,menu 可能在连接信号和槽时已经过早销毁,导致 connect 函数找不到有效的信号源。

总结

  • QMenu* menu:指针允许动态管理对象的生命周期,connect 可以正常工作。
  • QMenu menu:栈上的对象在超出作用域时可能被销毁,导致 connect 函数不能正确地处理信号和槽。

因此,使用指针确保 QMenu 对象在 connect 调用期间有效。

image-20240823104744847

image-20240823104804653

定义对象的指针,让widght来管理对象的生命周期,要是直接定义对象,可能不知道什么时候对象就被销毁了,有些用到这些对象的函数就可能报错,因为在栈上找不到他了

Qstring的用法:

Qstring::number(i)
    //把数字变成字符串

image-20241215191709432

3.STL字符串和Qstring字符串转换

std;;string s="qwert";
Qstring::fromStdString(s);
git init
git add .
git commit -m "003class"
git remote add origin git@github.com:Zgh20060114/Qt_Guide.git
git branch -m 003Class
git push -u origin 003Class
image-20241218174910120

手柄:

sudo apt-get install joystick
ls /dev/input/
jstest /dev/input/js0

关系总结:

  • OpenGL:是底层的图形 API,负责图形渲染。它本身不提供窗口管理或扩展加载功能。
  • GLFW:是一个跨平台的库,负责创建窗口、管理 OpenGL 上下文和处理用户输入。它为 OpenGL 提供一个平台无关的环境,简化了图形程序的基础设施部分。
  • GLEW:是一个用于加载和管理 OpenGL 扩展的库,确保你能够访问和使用特定硬件和驱动程序支持的扩展功能。它简化了 OpenGL 扩展的使用。

工作流程示例:

  1. 创建窗口和上下文:你使用 GLFW 创建一个窗口,并通过它创建一个 OpenGL 上下文。
  2. 加载 OpenGL 扩展:在程序初始化时,使用 GLEW 来加载系统支持的 OpenGL 扩展。
  3. 使用 OpenGL 渲染:通过 OpenGL 提供的 API 进行图形渲染。

image-20241221145644152