Qt 窗口

第四章 Qt窗口

Qt 窗⼝ 是通过 QMainWindow类 来实现的。

QMainWindow 是⼀个为⽤⼾提供主窗⼝程序的类,继承⾃ QWidget 类,并且提供了⼀个预定义的布局。QMainWindow 包含 ⼀个菜单栏(menu bar)、多个⼯具栏(tool bars)、多个浮动窗⼝(铆接部件)(dock widgets)、⼀个状态栏(status bar) 和⼀个 中⼼部件(central widget),它是许多应⽤程序的基础,如⽂本编辑器,图⽚编辑器等。如下图为 QMainwindow 中 各组件所处的位置:

菜单栏

Qt 中的菜单栏是通过 QMenuBar 这个类来实现的。⼀个主窗⼝最多只有⼀个菜单栏。位于主窗⼝顶

部、主窗⼝标题栏下⾯。

菜单栏中包含菜单. 菜单中包含菜单项.

创建菜单栏

菜单栏的创建可以借助于 QMainWindow类 提供的 menuBar() 函数来实现。

使⽤ setMenuBar 把菜单栏放到窗⼝中.

QMenu:创建菜单

在 Qt 中,并没有专⻔的菜单项类,可以通过 QAction 类,抽象出公共的动作。如在菜单中添加菜

单项.

代码示例:

快捷键默认:Alt + 字母

cpp 复制代码
	QMenuBar *menu_bar = new QMenuBar();           // 创建菜单栏
    this->setMenuBar(menu_bar);
    QMenu *menu1 = new QMenu("文件 (&F)");          // 创建菜单 + 名称 + 快捷键
    QMenu *menu2 = new QMenu("帮助 (&T)");          // 创建菜单
    QMenu *menu3 = new QMenu("关于 (&L)");          // 创建菜单
    QMenu *menu4 = new QMenu("子菜单 (&A)");        // 创建子菜单
    QAction *action1 = new QAction("新建 (&N)");    // 创建菜单项
    QAction *action2 = new QAction("菜单项1 (&A)"); // 创建菜单项
    QAction *action3 = new QAction("菜单项2 (&B)"); // 创建菜单项
    QAction *action4 = new QAction("菜单项3 (&C)"); // 创建菜单项
    menu_bar->addMenu(menu1);  // 添加菜单
    menu_bar->addMenu(menu2);  // 添加菜单
    menu_bar->addMenu(menu3);  // 添加菜单
    menu1->addAction(action1); // 添加菜单项
    menu1->addMenu(menu4);     // 添加子菜单
    menu4->addAction(action2); // 添加菜单项
    menu4->addAction(action3); // 添加菜单项
    menu4->addAction(action4); // 添加菜单项

如果勾选了自动生成ui文件,qt会自动创建菜单栏,再创建会发生内存泄漏,此时只用获取就行不用再创建

cpp 复制代码
QMenuBar *menu_bar = this->menuBar(); // 有就获取, 没有就创建
this->setMenuBar(menu_bar);

添加图标

cpp 复制代码
QMenuBar *menu_bar = this->menuBar();
    this->setMenuBar(menu_bar);
    QMenu *menu1 = new QMenu("文件 (&F)");
    menu1->setIcon(QIcon("C:\\Users\\27198\\Downloads\\a.jpg"));
    QAction *action1 = new QAction("新建 (&N)");    // 创建菜单项
    action1->setIcon(QIcon("C:\\Users\\27198\\Downloads\\a.jpg"));
    menu_bar->addMenu(menu1);  // 添加菜单
    menu1->addAction(action1); // 添加菜单项

菜单的文字会被覆盖,但快捷键不影响

添加分隔符

cpp 复制代码
	QMenuBar *menu_bar = this->menuBar();
    this->setMenuBar(menu_bar);

    QMenu *menu1 = new QMenu("文件");
    QAction *action1 = new QAction("新建");
    QAction *action2 = new QAction("打开");

    menu_bar->addMenu(menu1);
    menu1->addAction(action1);
    menu1->addSeparator(); // 添加分隔符
    menu1->addAction(action2);

工具栏

⼯具栏是应⽤程序中集成各种功能实现快捷键使⽤的⼀个区域。可以有多个,也可以没有,它并不是

应⽤程序中必须存在的组件。它是⼀个可移动的组件,它的元素可以是各种窗⼝组件,它的元素通常

以图标按钮的⽅式存在。如下图为⼯具栏的⽰意图:

创建工具栏

QToolBar() :创建⼯具栏

创建菜单项和工具栏里的快捷键用的都是QAction类;

cpp 复制代码
	QToolBar *tool_bar = new QToolBar();
    this->addToolBar(tool_bar);
    QAction *action1 = new QAction("新建"); // 创建菜单项
    QAction *action2 = new QAction("打开"); // 创建菜单项
    tool_bar->addAction(action1);
    tool_bar->addAction(action2);

添加图片

cpp 复制代码
	QToolBar *tool_bar = new QToolBar();
    this->addToolBar(tool_bar);
    QAction *action1 = new QAction("新建"); // 创建菜单项
    QAction *action2 = new QAction("打开"); // 创建菜单项
    action1->setIcon(QIcon("C:\\Users\\27198\\Downloads\\a.jpg"));
    action2->setIcon(QIcon("C:\\Users\\27198\\Downloads\\a.jpg"));
    tool_bar->addAction(action1);
    tool_bar->addAction(action2);

文字一样被覆盖

设置停靠位置

⼯具栏停靠位置的设置有两种⽅式。⼀种是在创建⼯具栏的同时指定停靠的位置,另⼀种是通过

QToolBar类 提供的 setAllowedAreas()函数 来设置。

⽅式⼀:创建⼯具栏的同时指定其停靠的位置。

在创建⼯具栏的同时,也可以设置⼯具栏的位置,其默认位置是在窗⼝的最上⾯;如上述代码,默认

在最上⾯显⽰。⼯具栏允许停靠的区域由 QToolBar类 提供的 allowAreas()函数 决定,其中可以设置

的位置包括:

• Qt::LeftToolBarArea:停靠在左侧

• Qt::RightToolBarArea:停靠在右侧

• Qt::TopToolBarArea:停靠在顶部

• Qt::BottomToolBarArea: 停靠在底部

• Qt::AllToolBarAreas:以上四个位置都可停靠

cpp 复制代码
	QToolBar *tool_bar = new QToolBar();
    this->addToolBar(Qt::LeftToolBarArea, tool_bar); // 默认停靠
    QAction *action1 = new QAction("新建"); // 创建菜单项
    QAction *action2 = new QAction("打开"); // 创建菜单项
    tool_bar->addAction(action1);
    tool_bar->addAction(action2);

其余自行验证;

设置浮动属性

⼯具栏的浮动属性可以通过 QToolBar类 提供的 setFloatable()函数 来设置。setFloatable()函数原

型为:

void setFloatable (bool floatable)

参数:

true:浮动

false:不浮动

浮动:

设置移动属性

设置⼯具栏的移动属性可以通过 QToolBar类 提供的 setMovable()函数 来设置。setMovable()函数

原型为:

void setMovable(bool movable)

参数:

true:移动

false:不移动

说明:若设置⼯具栏为不移动状态,则设置其停靠位置的操作就不会⽣效,所以设置⼯具栏的移动属性类似于总开关的效果。

状态栏

状态栏是应⽤程序中输出简要信息的区域。⼀般位于主窗⼝的最底部,⼀个窗⼝中最多只能有⼀个状

态栏。在 Qt 中,状态栏是通过 QStatusBar类 来实现的。 在状态栏中可以显⽰的消息类型有:

  • 实时消息:如当前程序状态
  • 永久消息:如程序版本号,机构名称
  • 进度消息:如进度条提⽰,百分百提⽰

状态栏的创建

状态栏的创建是通过 QMainWindow 类 提供的 statusBar() 函数来创建;⽰例如下:

cpp 复制代码
QStatusBar *status = this->statusBar(); // 有就获取,没有就创建
this->setStatusBar(status);             // 设置(添加显示)

在状态栏中显⽰实时消息

在状态栏中显⽰实时消息是通过 showMessage() 函数来实现,⽰例如下:

cpp 复制代码
status->showMessage("临时状态信息", 2000); // 临时消息    2秒

在状态栏中显⽰永久消息

在状态栏中可以显⽰永久消息,此处的永久消息是通过 标签 来显⽰的;⽰例如下:

cpp 复制代码
status->addWidget(ui->label); // 添加控件


addWidget是在左边添加

addPermanentWidget是在右边添加

相关推荐
机器视觉知识推荐、就业指导6 小时前
C++/Qt 联合编程中的定时器使用陷阱:QObject::startTimer 报错详解
c++·qt
Simple_core10 小时前
qt3d自定义生成mesh图形
开发语言·qt·3d
笨笨马甲12 小时前
附加模块--Qt SQL模块功能及架构解析
数据库·sql·qt
Kilicc_20 小时前
Qt工作总结06 < QMap<> 和QVector<QPair>、以及QPair<>和QMakePair<> >
qt·学习
hvinsion20 小时前
【开源解析】:Python打造专业级USB安全弹出工具(附完整源码)
python·qt·开源·usb弹出·psutil检测进程·解除占用usb·强制弹出u盘程序
沐雨潇竹2 天前
vs2022中detach qt widgets designer
开发语言·qt
tadus_zeng2 天前
Qt客户端技巧 -- 窗口美化 -- 圆角窗口
qt
0x7CF2 天前
QT3D学习笔记——圆台、圆锥
qt·学习·3d
委婉待续3 天前
Qt的学习(二)
c++·qt