Qt学习(18)——菜单与工具栏

菜单栏是GUI应用程序的常见部分。它是位于各个地方的一组命令,称为菜单。菜单组命令,我们可以在应用程序中使用它们。工具栏提供了对最常用命令的快速访问。

简单菜单

// simplemenu.h
#pragma once

#include <QMainWindow>
#include <QApplication>

class SimpleMenu : public QMainWindow {

  public:
    SimpleMenu(QWidget *parent = 0);
};
// simplemenu.cpp
#include "simplemenu.h"
#include <QMenu>
#include <QMenuBar>

SimpleMenu::SimpleMenu(QWidget *parent)
    : QMainWindow(parent) {

  // 此行创建一个QAction,每个QMenu都有一个或多个动作对象。
  QAction *quit = new QAction("&Quit", this);

  // 创建QMenu对象
  QMenu *file;
  file = menuBar()->addMenu("&File");
  // 使用addAction()方法在菜单内放置一个动作
  file->addAction(quit);

  // 当从菜单中选择此选项时,应用程序退出。
  connect(quit, &QAction::triggered, qApp, QApplication::quit);
}
// main.cpp
#include "simplemenu.h"

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

  QApplication app(argc, argv);  

  SimpleMenu window;

  window.resize(250, 150);
  window.setWindowTitle("Simple menu");
  window.show();

  return app.exec();
}

有一个菜单栏,一个菜单和一个动作。为了使用菜单,我们必须从QMainWindow部件继承。
simplemenu

图标,快捷键和分隔符

在下面的例子中,将进一步增强上一个应用程序,为菜单添加图标,使用快捷键和分隔符。

// anothermenu.h
#pragma once

#include <QMainWindow>
#include <QApplication>

class AnotherMenu : public QMainWindow {

  public:
    AnotherMenu(QWidget *parent = 0);
};
// anothermenu.cpp
#include "anothermenu.h"
#include <QMenu>
#include <QMenuBar>

AnotherMenu::AnotherMenu(QWidget *parent)
    : QMainWindow(parent) {

  // 这些是在菜单中使用的图像。请注意,某些桌面环境可能不会在菜单中显示图像。
  QPixmap newpix("new.png");
  QPixmap openpix("open.png");
  QPixmap quitpix("quit.png");

  // 在此代码中,使用带有pixmap的QAction构造函数作为第一个参数。
  QAction *newa = new QAction(newpix, "&New", this);
  QAction *open = new QAction(openpix, "&Open", this);
  QAction *quit = new QAction(quitpix, "&Quit", this);
  // 这里创建一个键盘快捷键。通过按这个快捷键,将运行退出操作,退出应用程序。
  quit->setShortcut(tr("CTRL+Q"));

  QMenu *file;
  file = menuBar()->addMenu("&File");
  file->addAction(newa);
  file->addAction(open);
  // 创建一个分隔符。分隔符是一条水平线,它使菜单操作分组到一些逻辑组中。
  file->addSeparator();
  file->addAction(quit);

  // 在某些环境下,菜单图标默认不显示。
  // 在这种情况下,可以禁用Qt::AA_DontShowIconsInMenus属性。
  qApp->setAttribute(Qt::AA_DontShowIconsInMenus, false);

  connect(quit, &QAction::triggered, qApp, &QApplication::quit);
}

在这个例子中,有一个包含三个动作的菜单。只有退出动作才真正有用。我们还创建了一个分隔符和一个CTRL+Q快捷键,它终止了应用程序。

// main.cpp
#include "anothermenu.h"

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

  QApplication app(argc, argv);  

  AnotherMenu window;

  window.resize(350, 200);
  window.setWindowTitle("Another menu");
  window.show();

  return app.exec();
}

可选菜单

在下一个例子中,将创建一个可选的菜单。这将是一个带有复选框的操作。该选项切换状态栏的可见性。

// checkable.h
#pragma once

#include <QMainWindow>
#include <QApplication>

class Checkable : public QMainWindow {

  Q_OBJECT  

  public:
    Checkable(QWidget *parent = 0);

  private slots:
    void toggleStatusbar();

  private:
    QAction *viewst;
};
// checkable.cpp
#include "checkable.h"
#include <QMenu>
#include <QMenuBar>
#include <QStatusBar>

Checkable::Checkable(QWidget *parent)
    : QMainWindow(parent) {

  // 创建一个动作,并使setCheckable()方法。
  // setCheckable()方法会让这个动作可选。
  viewst = new QAction("&View statusbar", this);
  viewst->setCheckable(true);
  viewst->setChecked(true);

  QMenu *file;
  file = menuBar()->addMenu("&File");
  file->addAction(viewst);

  statusBar();

  connect(viewst, &QAction::triggered, this, &Checkable::toggleStatusbar);
}

void Checkable::toggleStatusbar() {

  // 在toggleStatusbar()方法内部,确定菜单项是否被选中,并相应地隐藏或显示状态条。
  if (viewst->isChecked()) {

      statusBar()->show();
  } else {

      statusBar()->hide();
  }
}
// main.cpp
#include "checkable.h"

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

  QApplication app(argc, argv);  

  Checkable window;

  window.resize(250, 150);
  window.setWindowTitle("Checkable menu");
  window.show();

  return app.exec();
}

QToolBar

QToolBar类提供了一个可移动面板,其中包含一组控件,用于快速访问应用程序。

// toolbar.h
#pragma once

#include <QMainWindow>
#include <QApplication>

class Toolbar : public QMainWindow {

  Q_OBJECT  

  public:
    Toolbar(QWidget *parent = 0);
};
// toolbar.cpp
#include "toolbar.h"
#include <QToolBar>
#include <QIcon>
#include <QAction>

Toolbar::Toolbar(QWidget *parent)
    : QMainWindow(parent) {

  QPixmap newpix("new.png");
  QPixmap openpix("open.png");
  QPixmap quitpix("quit.png");

  // addToolBar()方法创建一个工具栏并返回一个指向它的指针。
  QToolBar *toolbar = addToolBar("main toolbar");
  // 在工具栏中添加两个动作和一个分隔符。
  toolbar->addAction(QIcon(newpix), "New File");
  toolbar->addAction(QIcon(openpix), "Open File");
  toolbar->addSeparator();
  QAction *quit = toolbar->addAction(QIcon(quitpix), 
      "Quit Application");

  connect(quit, &QAction::triggered, qApp, &QApplication::quit);
}

QMainWindow部件继承,创建一个工具栏.

// main.cpp
#include "toolbar.h"

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

  QApplication app(argc, argv);  

  Toolbar window;

  window.resize(300, 200);
  window.setWindowTitle("QToolBar");
  window.show();

  return app.exec();
}

应用框架

在这部分的最后,创建了一个应用程序框架。该示例主要基于QMainWindow控件。

// skeleton.h
#pragma once

#include <QMainWindow>
#include <QApplication>

class Skeleton : public QMainWindow {

  Q_OBJECT  

  public:
    Skeleton(QWidget *parent = 0);
};
// skeleton.cpp
#include "skeleton.h"
#include <QToolBar>
#include <QIcon>
#include <QAction>
#include <QMenu>
#include <QMenuBar>
#include <QStatusBar>
#include <QTextEdit>

Skeleton::Skeleton(QWidget *parent)
    : QMainWindow(parent) {

  QPixmap newpix("new.png");
  QPixmap openpix("open.png");
  QPixmap quitpix("quit.png");

  QAction *quit = new QAction("&Quit", this);

  QMenu *file;
  file = menuBar()->addMenu("&File");
  file->addAction(quit);

  connect(quit, &QAction::triggered, qApp, &QApplication::quit);

  QToolBar *toolbar = addToolBar("main toolbar");
  toolbar->addAction(QIcon(newpix), "New File");
  toolbar->addAction(QIcon(openpix), "Open File");
  toolbar->addSeparator();

  QAction *quit2 = toolbar->addAction(QIcon(quitpix), 
      "Quit Application");
  connect(quit2, &QAction::triggered, qApp, &QApplication::quit);

  // 创建一个 QTextEdit控件并将其放置到QMainWindow控件的中心部分。
  QTextEdit *edit = new QTextEdit(this);  

  setCentralWidget(edit);

  statusBar()->showMessage("Ready");
}

这里创建一个菜单工具栏和一个状态栏。

// main.cpp
#include "skeleton.h"

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

  QApplication app(argc, argv);  

  Skeleton window;

  window.resize(350, 250);
  window.setWindowTitle("Application skeleton");
  window.show();

  return app.exec();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本科毕业论文 Linux下文件管理与文件传送的研究与实现 目 录 摘 要 III 关键词 III Abstract III Key words III 前言 1 1 Linux操作系统 1 1.1 Linux操作系统的产生及发展 1 1.2 Linux操作系统的特点 3 1.2.1自由开放软件 3 1.2.2 真正的多任务多用户 3 1.2.3 UNIX的完整实现 3 1.2.4完全符合POSIX标准 3 1.2.5良好的用户界面 3 1.2.6 强大的网络功能 4 1.2.7 良好的可移植性 4 1.2.8设备独立性 4 2 界面设计工具——QT 5 2.1 QT发展历史 5 2.2 QT优点 5 2.2.1 优良的跨平台特性: 5 2.2.2 面向对象 6 2.2.3丰富的 API 6 2.3 KDE 和GNOME 6 2.4 QT的安装 7 2.4.1 获取源代码 7 2.4.2 解压缩 7 2.4.3 生成Makefile 7 2.4.4编译 7 2.4.5 安装 7 2.4.6 编程环境的设置 8 2.5 QT信号与槽机制 8 3 Linux虚拟文件系统 10 3.1 虚拟文件系统概述 10 3.2 VFS支持的文件系统可以划分为三种类型: 10 3.3 VFS功能 11 4 界面的实现 12 4.1发送端界面的实现 12 4.2 接收端的界面实现 13 4.3 锚接部件界面的实现 14 4.4 主窗口界面的现实 19 4.4.1 菜单栏 19 4.4.2状态栏 19 4.4.3 工具栏 19 4.4.4 中心部件 19 5 后台的实现 19 5.1 发送端后台实现 19 5.2 接收端后台实现 22 5.3锚接部件后台的实现 24 5.3.1 文件的搜索 24 5.3.2 修改文件的权限 26 5.4主窗口后台现实 27 5.4.1 文件的打开与关闭 27 5.4.2 文件的创建 27 5.4.3 文件的复制 27 5.4.4 文件的删除 28 6 结论 29 参考文献 29 致 谢 30

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值