域名解析网站打不开,做网站都能赚钱吗,制作网站难不难,物联网开发qt-C笔记之addAction和addMenu的区别以及QAction的使用场景
code review! 文章目录 qt-C笔记之addAction和addMenu的区别以及QAction的使用场景1.QMenu和QMenuBar的关系与区别2.addMenu和addAction的使用场景区别3.将QAction的信号连接到槽函数4.QAction的使用场景5.将例1修改…qt-C笔记之addAction和addMenu的区别以及QAction的使用场景
code review! 文章目录 qt-C笔记之addAction和addMenu的区别以及QAction的使用场景1.QMenu和QMenuBar的关系与区别2.addMenu和addAction的使用场景区别3.将QAction的信号连接到槽函数4.QAction的使用场景5.将例1修改为不使用QMainWindow使用QWidget6.QMenuBar *menuBar new QMenuBar(window); 详解 1.QMenu和QMenuBar的关系与区别
QMenu和QMenuBar是Qt中用于创建菜单的两个类它们之间存在关系和区别。 关系 QMenuBar是顶层窗口的菜单栏通常位于窗口的顶部负责承载和管理菜单。QMenu是菜单栏中的一个菜单项可以包含子菜单、动作等。 通常情况下你会创建一个QMenuBar对象作为主窗口的菜单栏然后使用addMenu方法添加多个QMenu对象作为菜单栏的菜单项。 区别 QMenuBar是一个顶级窗口部件用于承载和管理菜单。它通常只有一个并且位于主窗口的顶部。QMenu是一个弹出菜单或子菜单它可以包含多个菜单项QAction以及子菜单另一个QMenu。 总的来说QMenuBar是用于创建和管理菜单栏的部件而QMenu是用于创建和管理菜单的部件。QMenuBar通常只有一个用于承载多个QMenu对象而每个QMenu对象可以包含多个菜单项和子菜单。
以下是一个简单的示例代码演示了如何创建QMenuBar和QMenu 例1 代码
#include QApplication
#include QMainWindow
#include QMenuBar
#include QMenu
#include QActionint main(int argc, char *argv[]) {QApplication app(argc, argv);QMainWindow mainWindow;QMenuBar *menuBar mainWindow.menuBar();QMenu *fileMenu menuBar-addMenu(File);QAction *newAction fileMenu-addAction(New);QAction *openAction fileMenu-addAction(Open);QMenu *editMenu menuBar-addMenu(Edit);QAction *cutAction editMenu-addAction(Cut);QAction *copyAction editMenu-addAction(Copy);mainWindow.show();return app.exec();
}上述示例中首先创建了一个QMenuBar对象然后使用addMenu方法在菜单栏中添加了两个QMenu对象File和Edit。每个QMenu对象又通过addAction方法添加了相应的动作菜单项。
总结QMenuBar是用于创建和管理菜单栏的顶级窗口部件而QMenu是用于创建和管理菜单的部件。QMenuBar可以包含多个QMenu对象作为菜单项而每个QMenu对象可以包含多个菜单项和子菜单。
2.addMenu和addAction的使用场景区别
addMenu和addAction是用于在菜单QMenu中添加菜单项QAction的函数它们有不同的使用场景和区别。 addMenu的使用场景 当你想要在菜单中添加一个子菜单时使用addMenu是合适的。通过addMenu方法你可以在当前菜单中创建一个新的子菜单并返回该子菜单的指针以便进一步添加菜单项或子菜单。例如QMenu *fileMenu menuBar-addMenu(File);
QMenu *editMenu menuBar-addMenu(Edit);通常情况下你会使用addMenu在菜单栏QMenuBar或其他菜单QMenu中添加子菜单。 addAction的使用场景 当你想要在菜单中添加一个动作菜单项时使用addAction是合适的。通过addAction方法你可以在当前菜单中添加一个动作并返回该动作的指针以便进一步设置动作的属性和信号槽。例如QAction *newAction fileMenu-addAction(New);
QAction *openAction fileMenu-addAction(Open);通常情况下你会使用addAction在菜单或子菜单中添加动作以便用户可以执行相应的操作。
总结
addMenu适用于在菜单中添加子菜单。addAction适用于在菜单中添加动作菜单项。
根据你的需求和菜单结构选择合适的函数以在菜单中添加菜单项或子菜单。
3.将QAction的信号连接到槽函数
要将QAction的信号连接到槽函数你需要使用QObject::connect函数。以下是一个示例代码展示了如何连接QAction的triggered信号到槽函数
// 假设你有一个名为 action 的 QAction 对象和一个名为 receiver 的接收者对象// 定义槽函数
void MyReceiver::handleAction()
{// 处理 QAction 的触发事件// ...
}// 在连接信号和槽之前确保接收者对象 receiver 已经存在// 连接信号和槽
QObject::connect(action, QAction::triggered, receiver, MyReceiver::handleAction);在上面的代码中MyReceiver是接收者类其中定义了一个名为handleAction的槽函数。action是要连接的QAction对象receiver是接收者对象的实例。
QObject::connect函数的第一个参数是发送信号的对象第二个参数是信号的名称第三个参数是接收者对象第四个参数是槽函数的名称。你可以使用ClassName::slotName语法来指定槽函数。
当action的triggered信号被触发时与之连接的槽函数handleAction将被调用。你可以在槽函数中执行你想要的操作。
请确保在连接信号和槽之前接收者对象receiver已经被正确创建和初始化。 代码
#include QApplication
#include QMainWindow
#include QAction
#include QObject
#include QDebug
#include QMenu
#include QMenuBar// 定义接收者类
class MyReceiver : public QObject
{
public slots:void handleAction(){qDebug() Action triggered!;}
};int main(int argc, char *argv[])
{QApplication app(argc, argv);// 创建 QMainWindowQMainWindow mainWindow;// 创建 QActionQAction *action new QAction(My Action, mainWindow);// 创建接收者对象MyReceiver receiver;// 连接信号和槽QObject::connect(action, QAction::triggered, receiver, MyReceiver::handleAction);// 将 QAction 添加到 QMainWindow 的菜单栏QMenu *menu mainWindow.menuBar()-addMenu(File);menu-addAction(action);// 显示 QMainWindowmainWindow.show();return app.exec();
}4.QAction的使用场景
QAction不仅仅适用于菜单中的动作菜单项它还可用于其他用户界面元素和交互方式中。
虽然在菜单中添加动作是QAction的常见用法之一但它也可以用于以下情况 工具栏QAction可以用于在工具栏上添加按钮和其他交互元素。你可以将QAction对象添加到QToolBar中从而在工具栏上创建可点击的按钮。 快捷键QAction可以与快捷键关联使用户能够通过键盘快捷方式触发操作。通过setShortcut函数你可以为QAction指定一个键盘组合例如CtrlC或F5。 上下文菜单QAction可以与上下文菜单右键菜单关联。你可以将QAction添加到QMenu中并在用户右键单击相关界面元素时显示上下文菜单。 工具提示和状态栏QAction可以通过设置工具提示和状态栏消息来提供有关操作的附加信息。用户将鼠标悬停在具有关联QAction的界面元素上时工具提示将显示相应的文本。状态栏消息将在用户执行操作时显示在状态栏上。
总之QAction是一个通用的用户交互元素用于表示用户界面中的操作。它可以用于菜单、工具栏、快捷键、上下文菜单和其他需要与用户交互的地方。
5.将例1修改为不使用QMainWindow使用QWidget 代码
#include QApplication
#include QWidget
#include QMenuBar
#include QMenu
#include QActionint main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;QMenuBar *menuBar new QMenuBar(window);QMenu *fileMenu menuBar-addMenu(File);QAction *newAction fileMenu-addAction(New);QAction *openAction fileMenu-addAction(Open);QMenu *editMenu menuBar-addMenu(Edit);QAction *cutAction editMenu-addAction(Cut);QAction *copyAction editMenu-addAction(Copy);window.show();return app.exec();
}6.QMenuBar *menuBar new QMenuBar(window); 详解
QMenuBar *menuBar new QMenuBar(window); 这行代码的详细解释如下 QMenuBar 是 Qt 框架中的一个类用于创建和管理菜单栏Menu Bar。 window 是一个指向 QWidget 对象的指针表示菜单栏的父对象。在这种情况下我们将菜单栏设置为窗口的子对象以便在窗口关闭时自动释放菜单栏内存。 new QMenuBar(window) 使用 new 运算符进行动态内存分配创建了一个 QMenuBar 对象。通过传递 window 作为参数我们将窗口设置为菜单栏的父对象。 QMenuBar *menuBar 是一个变量声明它指定了变量的类型为 QMenuBar* 即菜单栏的指针类型。 是赋值操作符用于将 new QMenuBar(window) 的返回值赋给 menuBar 变量。这样menuBar 变量就指向了动态分配的菜单栏对象。
通过使用动态内存分配和指定父对象我们可以确保在窗口关闭时菜单栏对象会自动被销毁并释放内存。
总之 QMenuBar *menuBar new QMenuBar(window); 这行代码的作用是创建一个 QMenuBar 对象并将其设置为窗口的菜单栏并将菜单栏的指针存储在 menuBar 变量中以便后续对菜单栏进行操作。