Qt4读书笔记11

2009-2-9

创建菜单和工具栏

大部分现代GUI应用提供菜单、上下文菜单和工具栏。菜单使用户能够探究应用和学习如何做新的事情,而上下文菜单和工具栏提供了对频繁使用的功能的快速访问。

Qt通过其action概念简化了菜单和工具栏的编程。action可以被加入到任何菜单和工具栏上。在Qt中创建菜单和工具栏的步骤:

--创建并设置actions

--创建菜单并用actions构成

--创建工具栏并用actions构成

在电子表格应用中,actioncreateActions()方法中创建:

void MainWindow::createActions()

{

       newAction = new QAction(tr("&New"), this);

       newAction->setIcon(QIcon(":/images/new.png"));

       newAction->setShortcut(QKeySequence::New);

       newAction->setStatusTip(tr("Create a new spreadsheet file"));

       connect(newAction, SIGNAL(triggered()), this, SLOT(newFile()));

New action有一个accelerator:_New,一个父亲(main window),一个图标,一个快捷键,一个状态tip. 许多窗口系统对特定actions有标准的快捷键,例如,New action 的快捷键是Ctrl+N. 通过使用适当的QKeySequence::StandardKey枚举值,Qt可确保提供特定平台上的标准快捷键。

 

我们将actiontriggerer() signal连接到main windowprivate newFile() slot上。这个连接确保了当用户选择File|New菜单时,或者点击New工具栏按钮时,或者按下Ctrl+N时,newFile slot被调用。

Open,Save,Save As actionsNew Action类似,不再介绍,下面直接到“当前打开文件”部分:

...

for (int i=0; i<MaxRecentFiles; ++i) {

       recentFileActions[i] = new QAction(this);

       recentFileActions[i]->setVisible(false);

       connect(recentFileActions[i], SIGNAL(triggered()), this, SLOT(openRecentFile()));

}

创建时是隐藏的。

 

exitAction = new QAction(tr("E&xit"), this);

exitAction->setShortcut(tr("Ctrl+Q"));

exitAction->setStatusTip(tr("Exit the application"));

connect(exitAction, SIGNAL(triggered()), this, SLOT(close()));

 

exit Action与前面的稍微不同。没有标准的终止程序的键,所以我们明确定义了ctrl+Q键。另外一个不同是我们连接到了windowclost slot,这是Qt提供的slot.

 

...

selectAllAction = new QAction(tr("&All"), this);

selectAllAction->setShortcut(QKeySequence::SelectAll);

selectAllAction->setStatusTip("Select all the cells in th spreadsheet");

connect(selectAllAction, SIGNAL(triggered()), spreadsheet, SLOT(selectAll()));

 

其中的selectAll() slotQTableWidget的父类QAbstractItemView提供的,所以我们不用自己实现。

 

...

showGridAction = new QAction(tr("&Show Grid"), this);

showGridAction->setCheckable(true);

showGridAction->setChecked(spreadsheet->showGrid());

showGridAction->setStatusTip(tr("Show or hide the spreadsheet's grid"));

connect(showGridAction, SIGNAL(toggled(bool)), spreadsheet, SLOT(setShowGrid(bool)));

 

Show Grid是一个checkable action. 在菜单上有一个检查标记,在工具栏中对应一个开关按钮。当action处于打开状态,Spreadsheet组件显示网格。

 

       aboutQtAction = new QAction(tr("About &Qt"), this);

       aboutQtAction->setStatusTip(tr("Show the Qt library's About box"));

       connect(aboutQtAction, SIGNAL(triggered()), qApp, SLOT(aboutQt()));

}

调用的是QApplicationaboutQt() slot,通过qApp这个全局变量访问。

到此为止我们已经建立了actions,下面我们来创建菜单系统:

void MainWindow::createMenus()

{

       fileMenu = MenuBar()->addMenu(tr("&File"));

       fileMenu->addAction(newAction);

       fileMenu->addAction(openAction);

       fileMenu->addAction(saveAction);

       fileMenu->addAction(saveAsAction);

       separatorAction = fileMenu->addSeparator();

       for(int i=0; i<MaxRecentFiles; ++i)

              fileMenu->addAction(recentFileActions[i]);

       fileMenu->addSeparator();

       fileMenu->addAction(exitAction);

 

Qt中,menuQMenu的实例。 addMenu函数创建一个QMenu widge,并将其加到menu bar上。 QMainWindow::menuBar()函数返回一个QMenuBar的指针。

 

我开始建立了一个File menu然后加上了New, Open, Save, Save As actions.我们插入了一个分隔符来为菜单项分组。

 

    editMenu = menuBar()->addMenu(tr("&Edit"));

    editMenu->addAction(cutAction);

    editMenu->addAction(copyAction);

    editMenu->addAction(pasteAction);

    editMenu->addAction(deleteAction);

 

    selectSubMenu = editMenu->addMenu(tr("&Select"));

    selectSubMenu->addAction(selectRowAction);

    selectSubMenu->addAction(selectColumnAction);

    selectSubMenu->addAction(selectAllAction);

 

    editMenu->addSeparator();

    editMenu->addAction(findAction);

    editMenu->addAction(goToCellAction);

 

增加Edit menu

    toolsMenu = menuBar()->addMenu(tr("&Tools"));

    toolsMenu->addAction(recalculateAction);

    toolsMenu->addAction(sortAction);

 

    optionsMenu = menuBar()->addMenu(tr("&Options"));

    optionsMenu->addAction(showGridAction);

    optionsMenu->addAction(autoRecalcAction);

 

    menuBar()->addSeparator();

 

    helpMenu = menuBar()->addMenu(tr("&Help"));

    helpMenu->addAction(aboutAction);

    helpMenu->addAction(aboutQtAction);

}

用同样的方式增加Tools, Options, Help菜单。其中在Optionshelp菜单间增加了一个分隔符,根据显示风格的不同,Help的位置会不同。

 

void MainWindow::createContextMenu()

{

    spreadsheet->addAction(cutAction);

    spreadsheet->addAction(copyAction);

    spreadsheet->addAction(pasteAction);

    spreadsheet->setContextMenuPolicy(Qt::ActionsContextMenu);

}

 

Qt widget也能够与QActions关联。为了提供一个上下文菜单,我们将一组需要的action增加到Spreadsheet组件上。上下文菜单通过点击右键调用。

 

void MainWindow::createToolBars()

{

    fileToolBar = addToolBar(tr("&File"));

    fileToolBar->addAction(newAction);

    fileToolBar->addAction(openAction);

    fileToolBar->addAction(saveAction);

 

    editToolBar = addToolBar(tr("&Edit"));

    editToolBar->addAction(cutAction);

    editToolBar->addAction(copyAction);

    editToolBar->addAction(pasteAction);

    editToolBar->addSeparator();

    editToolBar->addAction(findAction);

    editToolBar->addAction(goToCellAction);

}

创建工具栏。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值