Windows图形界面(GUI)-QT-C/C++ - QT 窗口属性

目录

标题栏

基本概念

设置窗口标题

隐藏标题栏

UI编辑器

窗口关闭事件

窗口大小调整事件

窗口移动事件

自定义标题栏

菜单栏

基本概念

设置菜单栏(API)

设置菜单栏(UI)

工具栏

基本概念

设置工具栏(API)

设置工具栏(UI)

状态栏

基本概念

设置状态栏(API)


标题栏

基本概念

  • 标题栏是窗口管理系统(如 Windows、macOS、Linux 等)的一部分,用于显示窗口的标题和控制按钮(如最小化、最大化和关闭按钮)。在 Qt 中,标题栏是由窗口管理系统处理的,但我们可以通过 Qt 提供的方法来设置标题栏的内容和行为。

设置窗口标题

  • 使用 QWidget 或其子类(如 QMainWindow)的 setWindowTitle() 方法可以设置窗口的标题。

隐藏标题栏

  • 可以通过设置窗口标志(Window Flags)来隐藏窗口的标题栏window.setWindowFlags(Qt::FramelessWindowHint);

UI编辑器

  • 选择主窗口(如 QMainWindowQWidget)。

  • 在右侧的属性编辑器中,找到 windowTitle 属性。

  • 设置 windowTitle 属性为您希望的标题文本。

窗口关闭事件

  • 处理窗口关闭事件可以覆盖 closeEvent 方法

窗口大小调整事件

  • 处理窗口大小调整事件可以覆盖 resizeEvent 方法

窗口移动事件

  • 处理窗口移动事件可以覆盖 moveEvent 方法

自定义标题栏

  • 在某些情况下,您可能希望完全自定义标题栏的外观和行为。可以通过隐藏默认的标题栏并创建自定义的标题栏来实现。
cpp 复制代码
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //窗口标题
    this->setWindowTitle("0xCC");

    //隐藏标题
    //this->setWindowFlags(Qt::FramelessWindowHint);

}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

public:
    //窗口关闭
    void closeEvent(QCloseEvent *event) override
    {
        if(QMessageBox::question(this, "提示", "是否关闭窗口") == QMessageBox::Yes)
        {
            this->close();
        }
    }

    //窗口大小
    //virtual void resizeEvent(QResizeEvent *event)
    // const QSize &size() const

    //窗口移动
    //virtual void moveEvent(QMoveEvent *event)
    //const QPoint &pos() const

private:
    Ui::MainWindow *ui;
};

菜单栏

基本概念

  • 菜单栏是应用程序窗口的一部分,包含一个或多个菜单,每个菜单又包含多个菜单项。菜单项可以是命令、子菜单或其他功能,如复选框和单选按钮。菜单栏在 QMainWindow 中默认提供,并可以通过编程或使用 Qt Designer 进行设置。

设置菜单栏(API)

  • 在 Qt 中,可以通过 QMenuBar 类来创建和管理菜单栏。

  • 菜单栏 - QMenuBar

  • 菜单项 - QMenu

  • 子菜单 - QAction

cpp 复制代码
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) , ui(new Ui::MainWindow)
{
ui->setupUi(this);

//创建菜单栏
QMenuBar* menuBar = new QMenuBar(this);

//创建菜单项
QMenu* fileMenu = new QMenu("文件", this);
QMenu* EditMenu = new QMenu("编辑", this);

//关联菜单项
menuBar->addMenu(fileMenu);
menuBar->addMenu(EditMenu);

//添加子菜单
QAction* openAction = new QAction("打开", this);
QAction* exitAction = new QAction("退出", this);
QAction* copyAction = new QAction("复制", this);

fileMenu->addAction(openAction);
fileMenu->addAction(exitAction);
EditMenu->addAction(copyAction);

//关联槽函数
connect(exitAction, &QAction::triggered, this, &MainWindow::close);

//设置菜单栏
this->setMenuBar(menuBar);
}

设置菜单栏(UI)

  • 设置步骤

    • 打开 Qt Designer 并加载您的主窗口 UI 文件。

    • 在窗口顶部,找到菜单栏区域(通常显示为"Type Here")。

    • 点击"Type Here"并输入菜单名称(如"File")。

    • 右键单击新创建的菜单,选择"Add Action"创建菜单项。

    • 在属性编辑器中,可以设置菜单项的属性,如文本、快捷键和图标。

  • 属性设置

    • 菜单

      • title:菜单的标题文本。

      • enabled:是否启用菜单,默认为 true

      • visible:是否可见,默认为 true。(setVisible)

    • 菜单项

      • text:菜单项的文本。

      • icon:菜单项的图标。

      • shortcut:菜单项的快捷键,例如 Ctrl+O

      • checkable:是否为可选菜单项(复选框或单选按钮),默认为 false

      • checked:如果 checkabletrue,则表示菜单项是否被选中,默认为 false

      • enabled:是否启用菜单项,默认为 true

      • visible:是否可见,默认为 true

工具栏

基本概念

  • 在 Qt 中,工具栏(QToolBar)是用户界面中常用的一个组件,用于快速访问应用程序中最常用的功能。

  • QToolBar:Qt 中的工具栏类,继承自 QWidget

  • QAction:表示一个可以添加到菜单、工具栏或上下文菜单的操作。

设置工具栏(API)

  • 创建工具栏 - QToolBar

  • 添加动作到工具栏 - addAction

cpp 复制代码
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //创建工具栏
    QToolBar* toolBar = new QToolBar(this);

    //设置工具栏
    this->addToolBar(toolBar);

    //添加工具项
    QAction* newAction = new QAction("New", this);
    QAction* openAction = new QAction("Open", this);
    QAction* saveAction = new QAction("Save", this);

    //关联工具项
    toolBar->addAction(newAction);
    toolBar->addAction(openAction);
    toolBar->addAction(saveAction);

    //绑定控件类
    QLineEdit* lineEdit = new QLineEdit(this);
    toolBar->addWidget(lineEdit);

    //设置停靠区域
    toolBar->setAllowedAreas(Qt::TopToolBarArea | Qt::LeftToolBarArea);

    //设置浮动
    toolBar->setFloatable(0);

    //设置移动
    toolBar->setMovable(1);

    //创建工具栏
    QToolBar* toolBar2 = new QToolBar(this);

    //设置工具栏
    this->addToolBar(Qt::BottomToolBarArea,toolBar2);

    //添加工具项
    QAction* copyAction = new QAction("copy", this);
    QAction* pasteAction = new QAction("Paste", this);
    QAction* cutAction = new QAction("Cut", this);

    //关联工具项
    toolBar2->addAction(copyAction);
    toolBar2->addAction(pasteAction);
    toolBar2->addAction(cutAction);

}

设置工具栏(UI)

  • 添加工具栏:

    • 在主窗口上右键点击,选择"添加工具栏"。
  • 设置工具栏属性:

    • 在属性编辑器中,可以设置工具栏的名称、浮动性、可移动性等属性。
  • 添加动作:

    • 在动作编辑器中创建动作,然后将动作拖拽到工具栏上。
  • 属性设置

    • objectName:控件的内部名称,用于代码中引用该工具栏。

    • windowTitle:工具栏的窗口标题,通常在工具栏浮动时显示。

    • allowedAreas:定义工具栏可以停靠的区域(顶部、底部、左侧、右侧或任意组合)。

    • floatable:是否允许工具栏浮动。如果设置为 true,工具栏可以被拖出主窗口并独立显示。

    • movable:是否允许移动工具栏。如果设置为 true,用户可以拖动工具栏并重新定位。

    • orientation:工具栏的方向,默认为水平方向(Qt::Horizontal),也可以设置为垂直方向(Qt::Vertical)。

    • iconSize:工具栏中图标的大小。可以设定一个 QSize 来指定宽度和高度。

    • toolButtonStyle:工具栏按钮的样式。可以是只显示图标、只显示文字、同时显示或者按照按钮的默认设置。

状态栏

基本概念

  • 在 Qt 应用程序中,状态栏(QStatusBar)通常位于应用程序窗口的底部,用于显示临时的状态信息、提示信息或其他动态内容。

  • 状态栏(QStatusBar):显示应用程序的当前状态信息和其他短暂的信息。通常用于提示用户当前的操作状态、显示进度或提供简单的帮助信息。

设置状态栏(API)

  • 创建并设置状态栏 - 使用 QMainWindowstatusBar() 方法创建和获取状态栏实例。

  • 显示简单文本信息 - 使用 showMessage() 方法在状态栏显示文本。

  • 添加永久信息 - 可以使用 addPermanentWidget() 方法在状态栏中添加永久的控件(如标签或进度条)。

cpp 复制代码
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QStatusBar* statusBar = new QStatusBar(this);
    this->setStatusBar(statusBar);

    statusBar->showMessage("欢迎进入QT学习", 3000);

    QLabel* labelVer = new QLabel("Ver -> 1.0", this);
    statusBar->addPermanentWidget(labelVer);

    QProgressBar* progressBarFile = new QProgressBar(this);
    progressBarFile->setRange(0, 100);
    statusBar->addPermanentWidget(progressBarFile);
    progressBarFile->setValue(66);

    connect(ui->pushButton, &QPushButton::clicked, [=](){
        statusBar->showMessage("FileSave", 2000);
    });

}
相关推荐
Linux520小飞鱼2 分钟前
C++语言的数据结构
开发语言·后端·golang
湫兮之风13 分钟前
C++: Dtrees:load(constg String& filepath, const String& nodeName)中nodeName参数含义
开发语言·c++·算法
tan77º22 分钟前
【AcWing】蓝桥杯辅导课-递归与递推
开发语言·c++·笔记·算法·蓝桥杯
爱吃喵的鲤鱼29 分钟前
Linux——线程条件变量(同步)
java·开发语言
东小黑33 分钟前
java方法以及与C语言对比学习
java·c语言·学习
小李飞飞砖38 分钟前
kotlin的协程的基础概念
开发语言·前端·kotlin
007php0071 小时前
go语言zero框架通过chromedp实现网页在线截图的设计与功能实现
java·开发语言·后端·python·docker·云原生·golang
蚂蚁质量1 小时前
什么是 Java 虚拟机(JVM)?
java·开发语言·jvm
日拱一卒无有尽, 功不唐捐终入海2 小时前
Mybatis乐观锁使用
java·开发语言·jvm·mybatis
稳兽龙2 小时前
P7865 「EVOI-RD1」无人机航拍( ( [主题训练B1]线段树 ) 第四题)[ 采用高级二维差分数组 ]
c++·算法·二维差分数组·线段树区间修改