首页 > 其他分享 >【QT】Qt窗口(上)

【QT】Qt窗口(上)

时间:2024-10-28 23:17:06浏览次数:9  
标签:窗口 QT QAction new tb MainWindow Qt

在这里插入图片描述

个人主页~


Qt窗口


Qt窗口是通过QMainWindow类来实现的,我们之前的学习是通过QWidget类实现的

QMainWindow包含一个菜单栏Menu Bar②,多个工具栏Tool Bars③,多个浮动窗口Dock Widgets,一个状态栏Status Bar⑤和一个中心部件Central Widget④
①是Window Title

在这里插入图片描述

一、菜单栏

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //设置窗口名
    this->setWindowTitle("我的word文件");
	//创建菜单栏,将菜单栏设置到窗口当中
    QMenuBar* mb = new QMenuBar(this);
    this->setMenuBar(mb);
	//设置菜单名,将菜单设置到菜单栏中
    QMenu* m = new QMenu("文件");
    mb->addMenu(m);
	//设置菜单项,将菜单项设置到菜单当中
    QAction* a1 = new QAction("打开");
    QAction* a2 = new QAction("保存");
    QAction* a3 = new QAction("关闭");
    m->addAction(a1);
    m->addAction(a2);
    m->addAction(a3);
	//设置中心部件
    QTextEdit* te = new QTextEdit(this);
    this->setCentralWidget(te);
    te->setPlaceholderText("请输入");
}

<iframe allowfullscreen="true" data-mediaembed="csdn" frameborder="0" id="C9nioEaL-1729603517649" src="https://live.csdn.net/v/embed/430561"></iframe>

menubar

让我们加上对应的功能

    connect(a1,&QAction::triggered,this,&MainWindow::load);
    connect(a2,&QAction::triggered,this,&MainWindow::save);
    connect(a3,&QAction::triggered,this,&MainWindow::quit);
void MainWindow::save()
{
	//创建文件对话框
    QFileDialog* dg = new QFileDialog(this);
	//根据文件名创建文本文件
    QString filename = dg->getSaveFileName(this,"保存文件","C:/Users/14725/Desktop");
    qDebug() << filename;
    //将filename转换成一个标准C字符串,然后使用这个路径来创建一个std::ofstream对象file,以便打开并写入文件
    std::ofstream file(filename.toStdString().c_str());
    if(!file.is_open())
    {
        qDebug() << "文件保存失败";
        return;
    }
    //将textedit中的内容通过普通文本存放在text中
    const QString& text = te->toPlainText();
    //通过流输入到file文件
    file << text.toStdString();
    //关闭文件
    file.close();
}

void MainWindow::load()
{
	//创建文件对话框
    QFileDialog* d = new QFileDialog(this);
    //获取到指定位置的文件名
    QString filename = d->getOpenFileName(this,"加载文件","C:/Users/14725/Desktop");
    //将filename转换成一个标准C字符串,然后使用这个路径来创建一个std::ifstream对象file,以便加载文件
    std::ifstream file(filename.toStdString().c_str());
    if(!file.is_open())
    {
        qDebug() << "文件加载失败";
        return;
    }
    //创建两个字符串
    std::string content;
    std::string line;
    //一行一行从文件中扫描输入到content
    while (std::getline(file, line))
    {
        content += line;
        content += "\n";
    }
    //关闭文件
    file.close();
    //获取到content内容,呈现到textedit当中
    QString text = QString::fromStdString(content);
    te->setPlainText(text);
}

<iframe allowfullscreen="true" data-mediaembed="csdn" frameborder="0" id="pCfSimcp-1729692928164" src="https://live.csdn.net/v/embed/430584"></iframe>

menubar_2

二、工具栏

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
	//创建工具栏,将其添加到右侧区域
    QToolBar* tb = new QToolBar(this);
    addToolBar(Qt::RightToolBarArea,tb);
	//设置工具栏停留的位置只能为最左侧和最右侧
    tb->setAllowedAreas(Qt::LeftToolBarArea|Qt::RightToolBarArea);
	//设置是否可以作为一个独立的窗口被拖拽
    tb->setFloatable(false);
	//设置是否可以移动工具栏
    tb->setMovable(true);
	//设置工具栏内容
    QAction* openAction = new QAction("open",this);
    QAction* newAction = new QAction("new",this);
	
    tb->addAction(openAction);
    tb->addSeparator();
    tb->addAction(newAction);
	//在工具栏中添加控件
    QLabel* label = new QLabel("super little monster",this);
    tb->addWidget(label);
}

<iframe allowfullscreen="true" data-mediaembed="csdn" frameborder="0" id="I3d0zGJY-1729694010622" src="https://live.csdn.net/v/embed/430807"></iframe>

toolbar

三、状态栏

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
	//创建和设置状态栏,因为一个窗口创建默认有状态栏,
	//这里是直接把新创建的状态栏参数设置到已有的状态栏当中
    QStatusBar* sb = statusBar();
    setStatusBar(sb);
	//状态栏的显示内容和时间
    sb->showMessage("super_little_monster",2000);
	//设置一个label设置到右下角永久显示,左下角永久显示就是用addWidget
    QLabel* label = new QLabel("我在右下角",this);
    sb->addPermanentWidget(label);
}

<iframe allowfullscreen="true" data-mediaembed="csdn" frameborder="0" id="K4ninCNb-1729695566353" src="https://live.csdn.net/v/embed/430815"></iframe>

statusbar

四、浮动窗口

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
	//创建浮动窗口并将其设置在当前窗口中
    QDockWidget* dw = new QDockWidget("浮动窗口",this);
    addDockWidget(Qt::BottomDockWidgetArea,dw);
	//设置浮动窗口四个位置都可停靠,还有四个选项,分别是上下左右:
	//Qt::TopDockWidgetArea
	//Qt::BottomDockWidgetArea
	//Qt::LeftDockWidgetArea
	//Qt::RightDockWidgetArea
    dw->setAllowedAreas(Qt::AllDockWidgetAreas);
}

<iframe allowfullscreen="true" data-mediaembed="csdn" frameborder="0" id="YWfkCeAe-1729695950363" src="https://live.csdn.net/v/embed/430821"></iframe>

dockwidget


今日分享到此结束~
在这里插入图片描述

标签:窗口,QT,QAction,new,tb,MainWindow,Qt
From: https://blog.csdn.net/s_little_monster/article/details/143101446

相关文章

  • qt标题,解决title的png图片scaled后显示有明显锯齿
    一、通用方法(使用Qlabel)//添加窗口图标iconLabel=newQLabel(this);QPixmapiconPixmap(":/ico.png");//替换成你的图标文件路径iconLabel->setPixmap(iconPixmap.scaled(125,35,Qt::KeepAspectRatio,Qt::SmoothTransformation));iconLayout->addWidget(iconLabel);......
  • Qt 实现启动动画
    受bilibili客户端启发,同款效果动画初始化voidMainWindow::initOverlayLabelAnimation(){//在centralwidget上创建一个覆盖的labeloverlayLabel=newQLabel(this);//加载logo图片QPixmappix=QPixmap(PNG_LINEX);floatscaled=0.3;ov......
  • Qt电子相册
    目录项目要求项目实现 ui设计代码dialog.hdialog.cpp源码项目要求基于作业3.0,增添以下功能:1.优化图片和代码逻辑2.增加自动翻页功能3.增加试试手气功能项目实现 ui设计 代码dialog.h#ifndefDIALOG_H#defineDIALOG_H#include<QDialog>#incl......
  • Qt作业3.0
    目录题目:ui界面设计:​编辑代码:dialog.hdialog.cppmain.cpp源码:题目:设计一个电子相册,点击上一张,切换到上一张图片,点击下一张,切换到下一张图片。要求:图片的展示可以循环,使用QList<QString>存储图片路径ui界面设计:代码:dialog.h//头文件dialog.h#ifn......
  • day10(Qt)OpenCV
    目录OpenCV1.OpenCV简介2.环境搭建3.人脸检测OpenCV1.OpenCV简介OpenCV(OpenSourceComputerVisionLibrary)是一个开源的计算机视觉库,它提供了丰富的图像处理和计算机视觉功能。该库由英特尔公司发起,并在BSD许可证下发布,因此它是免费的,且开放源代码。OpenCV......
  • 基于YOLOv8深度学习的吸烟/抽烟行为检测系统【python源码+Pyqt5界面+数据集+训练代码
    背景及意义吸烟行为检测对于维护公共场所的健康环境、防止火灾事故的发生以及促进健康生活方式都具有重要作用。使用基于YOLOv8的吸烟行为检测系统能够有效识别视频中的吸烟行为,从而及时采取适当措施。本文基于YOLOv8深度学习框架,通过2357张图片,训练了一个进行吸烟行为的......
  • 基于YOLOv10/YOLOv9/YOLOv8深度学习的工业螺栓螺母检测系统【python源码+Pyqt5界面+数
    背景及意义工业螺栓螺母检测系统的实施显著提高了制造行业的产品质量和工作效率。该系统的应用涵盖了从生产、检查到包装等各个环节,为精密设备的维护和安全运行提供了强大的技术支持。本文基于YOLOv10/YOLOv9/YOLOv8深度学习框架,通过2548张工业螺栓螺母的相关图片,训练了可......
  • 基于YOLOv10/v9/v8深度学习的金属焊缝缺陷检测系统【python源码+Pyqt5界面+数据集+训
    背景及意义金属焊缝缺陷检测系统的实现显著提高了众多工业领域产品的安全性和可靠性。自动化的检测过程不仅增加了工作效率,还降低了人力成本和事故风险。本文基于YOLOv10/v9/v8深度学习框架,通过3170张金属焊缝缺陷的相关图片,训练了可进行焊缝缺陷目标检测的模型,可以分别......
  • 基于YOLOv8深度学习的人脸面部口罩检测系统【python源码+Pyqt5界面+数据集+训练代码】
    背景及意义人脸口罩面部检测能够准确地检测人脸是否佩戴口罩,对于控制疫情传播、保障公共卫生安全起到关键作用。本文基于YOLOv8深度学习框架,通过853张图片,训练了一个进行人脸面部口罩的目标检测模型,能够准确的检测人脸“戴口罩”、“未戴口罩”及“未正确佩戴口罩”。并基......
  • Qt gridLayout布局占两格或两列在ui文件中实现
         在Qt  gridLayou布局里添加一个控件如何设置其占两格或多格   如下图:             一、如果是纯代码编写的界面 (大多是这个方式)     在纯代码编写的界面应用中,可以使用函数QGridLayout::addWidget(QWidget*w,intr......