qt QAction详解

1、概述

QAction是Qt框架中的一个抽象类,用于表示用户界面中的一个动作(action)。这些动作可以绑定到菜单项、工具栏按钮或快捷键上,提供了一种灵活的方式来处理用户交互。QAction不仅包含了动作的名称、图标、提示信息等属性,还可以与特定的回调函数关联,当动作被触发时,执行相应的回调函数。

QAction是Qt信号与槽机制的一个典型应用,它允许开发人员将动作与用户界面元素解耦,从而更容易地管理和维护代码。通过使用QAction,开发人员可以创建一致的、可重用的用户界面元素,提升应用程序的可维护性和用户体验。

2、重要方法
  • setText(const QString &text):设置动作的文本标签。
  • setIcon(const QIcon &icon):设置动作的图标。
  • setShortcut(const QKeySequence &shortcut):设置动作的快捷键。
  • setStatusTip(const QString &statusTip):设置动作的状态提示信息,通常显示在状态栏中。
  • setToolTip(const QString &tip):设置动作的工具提示信息,当用户将鼠标悬停在动作上时显示。
  • setWhatsThis(const QString &text):设置动作的"这是什么"帮助信息,当用户按下Shift+F1并悬停在动作上时显示。
  • triggered(bool checked = false):这是一个信号,当动作被触发时发出。在子类中可以重写此方法以提供自定义行为。
  • connect():通常与triggered信号一起使用,将动作与特定的回调函数关联。
3、重要信号
  • triggered(bool checked = false):当动作被触发时发出此信号。如果动作是可检查的(checkable),则checked参数指示动作是否被选中。

    #include <QApplication>
    #include <QMainWindow>
    #include <QMenuBar>
    #include <QToolBar>
    #include <QAction>
    #include <QMessageBox>

    class MainWindow : public QMainWindow {
    Q_OBJECT

    public:
    MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) {
    // 创建菜单
    QMenuBar *menuBar = this->menuBar();
    QMenu *fileMenu = menuBar->addMenu(tr("&File"));

    复制代码
          // 创建动作  
          QAction *newAction = new QAction(tr("&New"), this);  
          newAction->setIcon(QIcon(":/icons/new.png"));  
          newAction->setStatusTip(tr("Create a new file"));  
          connect(newAction, &QAction::triggered, this, &MainWindow::onNewFile);  
    
          QAction *openAction = new QAction(tr("&Open..."), this);  
          openAction->setIcon(QIcon(":/icons/open.png"));  
          openAction->setStatusTip(tr("Open an existing file"));  
          connect(openAction, &QAction::triggered, this, &MainWindow::onOpenFile);  
    
          // 将动作添加到菜单  
          fileMenu->addAction(newAction);  
          fileMenu->addAction(openAction);  
    
          // 创建工具栏  
          QToolBar *toolBar = this->addToolBar(tr("Main Toolbar"));  
          toolBar->addAction(newAction);  
          toolBar->addAction(openAction);  
      }  

    private slots:
    void onNewFile() {
    QMessageBox::information(this, tr("New File"), tr("Create a new file..."));
    }

    复制代码
      void onOpenFile() {  
          QMessageBox::information(this, tr("Open File"), tr("Open an existing file..."));  
      }  

    };

    int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    复制代码
      MainWindow window;  
      window.show();  
    
      return app.exec();  

    }

觉得有帮助的话,打赏一下呗。。

相关推荐
漫步企鹅2 天前
【VS Code - Qt】如何基于Docker Linux配置Windows10下的VS Code,开发调试ARM 版的Qt应用程序?
linux·qt·docker·arm·vs code·开发调试
pzzqq2 天前
buildroot编译qt 5.9.8 arm64版本踩坑
开发语言·qt
还债大湿兄2 天前
基于Qt Property Browser的通用属性系统:Any类与向量/颜色属性的完美结合
开发语言·qt
luciferau2 天前
Qt: WA_DontCreateNativeAncestors
qt
钱彬 (Qian Bin)3 天前
AI质检数据准备利器:基于Qt/QML 5.14的图像批量裁剪工具开发实战
qt·自定义·图像·qml·qt quick·裁剪工具
啊森要自信3 天前
【QT】常⽤控件详解(七)容器类控件 GroupBox && TabWidget && 布局管理器 && Spacer
linux·开发语言·c++·qt·adb
郝学胜-神的一滴3 天前
Horse3D引擎研发笔记(一):从使用Qt的OpenGL库绘制三角形开始
c++·qt·3d·unity·图形渲染·unreal engine
啊森要自信4 天前
【QT】常⽤控件详解(六)多元素控件 QListWidget && Table Widget && Tree Widget
c语言·开发语言·c++·qt
ZPC82104 天前
参数服务器 server and client
服务器·qt
牵牛老人4 天前
Qt中的QWebSocket 和 QWebSocketServer详解:从协议说明到实际应用解析
开发语言·qt·网络协议