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);
    });

}
相关推荐
白白白小纯几秒前
算法篇—反转链表
c语言·数据结构·算法·leetcode
韭菜炒鸡肝天23 分钟前
VTK开发笔记(一):VTK介绍,Qt..+VSx+VTK.编译
开发语言·笔记·qt
小羊先生car36 分钟前
RTOS-F429-HAL-绝对延时和相对延时(2026/7/31)
c语言·rtos
Aaron - Wistron1 小时前
Web API C# (Furion版)带 单元测试
开发语言·后端·c#
笨鸟先飞,勤能补拙1 小时前
AI 赋能网络安全领域深度剖析
网络·人工智能·windows·安全·web安全·网络安全·github
刀法孜然2 小时前
QT5.12.8开发中使用触摸屏,配置的环境变量,imx6ullpro开发板qt开发
qt
Dxy12393102162 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
我上去就是一套QWER然后等待复活2 小时前
Windows 清理 CC Switch 并恢复官方 Codex CLI 登录流程(完整记录)
windows
0566463 小时前
Python康复训练——常用标准库
开发语言·python·学习
骊城英雄3 小时前
基于C#+avalonia ui实现的跨平台点胶机灌胶监控控制上位机软件
开发语言·ui·c#