Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7684055
  • 博文数量: 961
  • 博客积分: 15795
  • 博客等级: 上将
  • 技术积分: 16612
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-07 14:23
文章分类

全部博文(961)

文章存档

2016年(1)

2015年(61)

2014年(41)

2013年(51)

2012年(235)

2011年(391)

2010年(181)

分类: 嵌入式

2013-12-18 14:37:19

Qt 使用QAction类作为动作。顾名思义,这个类就是代表了窗口的一个“动作”,这个动作可能显示在菜单,作为一个菜单项,当用户点击该菜单项,对用户的点击做出响应;也可能在工具栏,作为一个工具栏按钮,用户点击这个按钮就可以执行相应的操作。有一点值得注意:无论是出现在菜单栏还是工具栏,用户选择之后,所执行的动作应该都是一样的。因此,Qt 并没有专门的菜单项类,只是使用一个QAction类,抽象出公共的动作。当我们把QAction对象添加到菜单,就显示成一个菜单项,添加到工具栏,就显示成一个工具按钮。用户可以通过点击菜单项、点击工具栏按钮、点击快捷键来激活这个动作。

QAction包含了图标、菜单文字、快捷键、状态栏文字、浮动帮助等信息。当把一个QAction对象添加到程序中时,Qt 自己选择使用哪个属性来显示,无需我们关心。同时,Qt 能够保证把QAction对象添加到不同的菜单、工具栏时,显示内容是同步的。也就是说,如果我们在菜单中修改了QAction的图标,那么在工具栏上面这个QAction所对应的按钮的图标也会同步修改。

下面我们来看看如何在QMainWindow中使用QAction

点击(此处)折叠或打开

  1. // ========== mainwindow.h
  2. #ifndef MAINWINDOW_H
  3. #define MAINWINDOW_H
  4.  
  5. #include <QMainWindow>
  6.  
  7. class MainWindow : public QMainWindow
  8. {
  9.     Q_OBJECT
  10. public:
  11.     MainWindow(QWidget *parent = 0);
  12.     ~MainWindow();
  13.  
  14. private:
  15.     void open();
  16.  
  17.     QAction *openAction;
  18. };
  19.  
  20. #endif // MAINWINDOW_H
  21.  
  22. // ========== mainwindow.cpp
  23. #include <QAction>
  24. #include <QMenuBar>
  25. #include <QMessageBox>
  26. #include <QStatusBar>
  27. #include <QToolBar>
  28.  
  29. #include "mainwindow.h"
  30.  
  31. MainWindow::MainWindow(QWidget *parent) :
  32.     QMainWindow(parent)
  33. {
  34.     setWindowTitle(tr("Main Window"));
  35.  
  36.     openAction = new QAction(QIcon(":/images/doc-open"), tr("&Open..."), this);
  37.     openAction->setShortcuts(QKeySequence::Open);
  38.     openAction->setStatusTip(tr("Open an existing file"));
  39.     connect(openAction, &QAction::triggered, this, &MainWindow::open);
  40.  
  41.     QMenu *file = menuBar()->addMenu(tr("&File"));
  42.     file->addAction(openAction);
  43.  
  44.     QToolBar *toolBar = addToolBar(tr("&File"));
  45.     toolBar->addAction(openAction);
  46.  
  47.     statusBar() ;
  48. }
  49.  
  50. MainWindow::~MainWindow()
  51. {
  52. }
  53.  
  54. void MainWindow::open()
  55. {
  56.     QMessageBox::information(this, tr("Information"), tr("Open"));
  57. }


上面的代码分别属于两个文件:mainwindow.h 和 mainwindow.cpp。为了让 MainWindow 运行起来,我们还需要修改 main() 函数如下:

int main(int argc, char *argv[])

{

    QApplication app(argc, argv);

 

    MainWindow win;

    win.show();

 

    return app.exec();

}

当我们编辑好文件,点击运行

这是一个相对完整的程序。首先,我们在MainWindow类中添加了一个私有函数open()和一个私有变量openAction。在 MainWindow 的构造函数中,第一行我们调用了setWindowTitle(),设置主窗口的标题。注意我们的文本使用tr()函数,这是一个用于 Qt 国际化的函数。我们可以使用 Qt 提供的国际化工具,将tr()函数的字符串提取出来,进行国际化。

QAction第二个参数中,文本值前面有一个 &,意味着这将成为一个快捷键。

下面一句,我们使用了setShortcut()函数,用于说明这个QAction的快捷键。Qt QKeySequence为我们定义了很多内置的快捷键,比如我们使用的 Open。你可以通过查阅 API 文档获得所有的快捷键列表。 这个与我们自己定义的有什么区别呢?简单来说,我们完全可以自己定义一个tr("Ctrl+O")来实现快捷键。原因在于,这是 Qt 跨平台性的体现。比如 PC 键盘和 Mac 键盘是不一样的,一些键在 PC 键盘上有,而 Mac 键盘上可能并不存在,或者反之。使用QKeySequence类来添加快捷键,会根据平台的不同来定义相应的快捷键。

setStatusTip()则实现了当用户鼠标滑过这个 action 时,会在主窗口下方的状态栏显示相应的提示。

后面的connect()函数,将这个QActiontriggered()信号与MainWindow类的open()函数连接起来。当用户点击了这个QAction时,会自动触发MainWindowopen()函数。这是我们之前已经了解过的。

下面的menuBar()toolBar()statusBar()三个是QMainWindow的函数,用于创建并返回菜单栏、工具栏和状态栏。我们可以从代码清楚地看出,我们向菜单栏添加了一个 File 菜单,并且把这个QAction对象添加到这个菜单;同时新增加了一个 File 工具栏,也把QAction对象添加到了这个工具栏。我们可以看到,在菜单中,这个对象被显示成一个菜单项,在工具栏变成了一个按钮。至于状态栏,则是出现在窗口最下方,用于显示动作对象的提示信息的。
 
返回目录:Qt学习整理

阅读(5881) | 评论(0) | 转发(1) |
0

上一篇:QT 快捷键

下一篇:QT 资源文件

给主人留下些什么吧!~~