【QT】QT菜单栏、状态栏、工具栏

简介: 【QT】QT菜单栏、状态栏、工具栏

菜单栏、工具栏、状态栏

主窗口框架(QMainWindow)拥有自己的布局,包括以下组件:

  • 菜单栏

菜单栏包含了一个下拉菜单项的列表,这些菜单项通过QAction动作类实现。一个主窗口只能有一个菜单栏。

  • 工具栏

工具栏一般用于常用的菜单项,也可以插入其他窗口部件,一个主窗口可以拥有多个工具栏。

  • 中心部件

主窗口中心区域可以放入一个窗口部件作为中心部件,是应用程序的主要功能实现区域,一个主窗口只能有一个中心部件。

  • dock部件

dock部件又称为停靠部件,或停靠窗口,可停靠在窗口部件的四周,用来设置一些部件来实现一些功能,类似一个工具箱,一个主窗口可拥有多个dock部件。

  • 状态栏

状态栏用于显示程序的一些状态信息,在主窗口的最底下,一个主窗口只能拥有一个状态栏。

菜单栏、工具栏、状态栏

代码添加示例。

   //菜单
    QMenu* editMenu = ui->menuBar->addMenu("编辑(&E)");
    QAction *action_copy = editMenu->addAction(QIcon("test.png"),QString("复制(&C)"));
    action_copy->setShortcut(QKeySequence("Ctrl+C"));
    //添加到主窗口工具栏——工具栏添加动作按钮
    ui->mainToolBar->addAction(action_copy);
    //动作按钮组,互斥选项,只能选择这其中的一个
    QActionGroup* group = new QActionGroup(this);
    QAction* action_L = group->addAction("左对齐(&L)");
    QAction* action_R = group->addAction("右对齐(&R)");
    QAction* action_C = group->addAction("居中对齐(&C)");
    QAction* action_J = group->addAction("两端对齐(&J)");
    //设置可选
    action_L->setCheckable(true);
    action_R->setCheckable(true);
    action_C->setCheckable(true);
    action_J->setCheckable(true);
    //菜单栏中添加分隔线
    editMenu->addSeparator();
    //添加到窗口菜单
    editMenu->addAction(action_L);
    editMenu->addAction(action_R);
    editMenu->addAction(action_C);
    editMenu->addAction(action_J);

    // 工具栏添加部件
    QToolButton* toolBtn = new QToolButton(this);
    toolBtn->setText("颜色");
    QMenu* colorMenu = new QMenu(this);
    colorMenu->addAction("红色");
    colorMenu->addAction("绿色");
    toolBtn->setMenu(colorMenu);
    //设置模式为弹出式菜单
    toolBtn->setPopupMode(QToolButton::MenuButtonPopup);
    ui->mainToolBar->addWidget(toolBtn);
    //添加调节大小窗口
    QSpinBox* spinBox = new QSpinBox(this);
    ui->mainToolBar->addWidget(spinBox);
    //显示临时信息
    ui->statusBar->showMessage(QString("欢迎......"),3000);
    //添加状态栏永久显示
    QLabel* tag = new QLabel("https://doraemon-hub-art.github.io");
    ui->statusBar->addPermanentWidget(tag);

自定义菜单栏

自定义菜单需要定义一个继承QWidgetAction的类, 并重写createWidget方法,在该方法中自定义部件设置。

示例MyAction.h

#ifndef MYACTION_H
#define MYACTION_H
#include<QWidgetAction>
#include<QLineEdit>

class MyAction : public QWidgetAction
{
    Q_OBJECT
public:
    MyAction(QObject* parent = 0);
protected:
    QWidget* createWidget(QWidget* parent);
signals:
    void getText(const QString& string);
private slots:
    void sendText();
private:
    QLineEdit* lineEdit;
};

#endif // MYACTION_H

MyAction.cpp

#include "myaction.h"
#include<QSplitter>
#include<QLabel>
MyAction::MyAction(QObject* parent):QWidgetAction(parent)
{
    lineEdit = new QLineEdit;
    connect(lineEdit,&QLineEdit::returnPressed,this,&MyAction::sendText);
}

QWidget *MyAction::createWidget(QWidget *parent)
{
    //是否继承自菜单或者工具栏
    //是则创建父部件的子部件并返回子部件
    if(parent->inherits("QMenu")||parent->inherits("QToolBar"))
    {
        QSplitter * splitter = new QSplitter(parent);
        QLabel* label = new QLabel("插入文本:");
        splitter->addWidget(label);
        splitter->addWidget(lineEdit);
        return splitter;
    }
}
void MyAction::sendText()
{
    emit getText(lineEdit->text());
    lineEdit->clear();
}
相关文章
|
8月前
Qt6学习笔记三(QMainWindow、菜单栏、工具栏、状态栏、铆接部件、核心部件)
Qt6学习笔记三(QMainWindow、菜单栏、工具栏、状态栏、铆接部件、核心部件)
213 0
|
5月前
|
API UED
【Qt 学习笔记】Qt窗口 | 状态栏 | QStatusBar的使用及说明
【Qt 学习笔记】Qt窗口 | 状态栏 | QStatusBar的使用及说明
657 4
|
5月前
|
UED
【Qt 学习笔记】Qt窗口 | 工具栏 | QToolBar的使用及说明
【Qt 学习笔记】Qt窗口 | 工具栏 | QToolBar的使用及说明
724 2
|
5月前
|
数据可视化
【Qt 学习笔记】Qt窗口 | 菜单栏 | QMenuBar的使用及说明
【Qt 学习笔记】Qt窗口 | 菜单栏 | QMenuBar的使用及说明
1107 2
|
8月前
|
Windows
[Qt5] 创建菜单栏、工具栏、核心控件和浮动窗口
[Qt5] 创建菜单栏、工具栏、核心控件和浮动窗口
145 0
《QT从基础到进阶·九》菜单,菜单栏,工具栏创建
《QT从基础到进阶·九》菜单,菜单栏,工具栏创建
78 0
QT桌面项目(状态栏和导航栏设置)
QT桌面项目(状态栏和导航栏设置)
272 0
|
6月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
216 1
|
5月前
|
监控 C++ 容器
【qt】MDI多文档界面开发
【qt】MDI多文档界面开发
131 0