Qt 之 自定义窗口标题栏

Qt 之 自定义窗口标题栏一 简述今天晚上就如何用 Qt 自定义窗口标题栏 写了一个小例子 比较基础 实用 在此分享一下 首先 Qt 是跨平台的 所以在不同的平台上窗口的外观是不一样的 比如在 windows 平台上 用 Qt 显示的一个窗口就跟一般 windows 程序窗口的外观一致 如下图 同时不同 windows 系统 窗口外观显示也不一致 上面左边是我在 win8 系统上显示的窗口 右边是 win7 下显示的窗口 可以看

Qt训练营开始了,更多精彩、好玩的内容等着你,赶紧报名吧! 群号:


一、简述

今天晚上就如何用Qt自定义窗口标题栏,写了一个小例子,比较基础,实用。在此分享一下。

首先Qt是跨平台的,所以在不同的平台上窗口的外观是不一样的。比如在windows平台上,用Qt显示的一个窗口就跟一般windows程序窗口的外观一致,如下图。

这里写图片描述 这里写图片描述

同时不同windows系统,窗口外观显示也不一致,上面左边是我在win8系统上显示的窗口右边是win7下显示的窗口。可以看出两个窗口外观差别很大,同时在win8系统中标题内容居中了,win7标题则靠左。为了 解决窗口外观在不同系统下不一致的问题,我们干脆去掉窗口自带的边框,Qt中直接用一下代码即可去除窗口边框效果

this->setWindowFlags(Qt::FramelessWindowHint);

这里写图片描述

上图就是去除窗口边框后的效果图。这样是不是看起来奇怪,是不是没有了标题栏。

一般情况下一个标题栏提供了窗口图标、窗口标题、最小化、最大化、关闭按钮等几个部分,这些对于一个窗口来说是十分重要的,窗口图标标志着这是一个什么程序,标题就表明这个窗口是干什么的,最小化、最大化、关闭等按钮则是用户对该窗口的操作。


下图是的几个窗口标题栏。可以看出的窗口都用了同一个窗口图标,一看到这个标志就知道是程序的窗口,同时每个窗口标题栏不同,代表着这个窗口的作用以及用户可以在窗口中进行什么样的操作。

这里写图片描述


音乐的标题栏

这里写图片描述

有道词典的标题栏

这里写图片描述

PS软件的标题栏

这里写图片描述

以上几款软件的标题栏都涵盖了以上几个重要的组成部分。


自定义标题栏的好处

  • 首先自定义标题栏解决了我们程序在不同平台乃至同一平台不同的版本中样式不同的问题,使用自定义标题栏,能够保证外观的一致性,这也是为什么像、有道词典、360等软件都没有使用系统标题栏,都是自定义标题栏了。
  • 正是因为自定义标题栏,我们可以自定义不再受约束,想怎么设计就怎么设计。
  • 自定义标题栏可以使用自己设计的图标,当然比系统的图标要美观了,颜值当然更高了。

下面就讲一讲如何用Qt实现自定义窗口标题栏。

二、代码之路

这个是之前模仿做的一个登录界面窗口。

这里写图片描述


这里我们先看一下本程序中简单一点的效果图:

这里写图片描述

注意:

本程序的BaseWindow是继承于QWidget,如果大家想要继承QMainWindow,则需要把BaseWindow的基类改为QMainWindow。


// 标题栏类;

mytitlebar.h

#include 
        
          #include 
         
           #include 
          
            #include 
           
             enum ButtonType { MIN_BUTTON = 0, // 最小化和关闭按钮; MIN_MAX_BUTTON , // 最小化、最大化和关闭按钮; ONLY_CLOSE_BUTTON // 只有关闭按钮; }; class MyTitleBar : public QWidget { Q_OBJECT public: MyTitleBar(QWidget *parent); //这里parent没有给默认值NULL,保证在创建MyTitleBar对象时父指针必须得赋值;且赋值不为NULL; ~MyTitleBar(); // 设置标题栏背景色及是否设置标题栏背景色透明; void setBackgroundColor(int r, int g, int b , bool isTransparent = false); // 设置标题栏图标; void setTitleIcon(QString filePath , QSize IconSize = QSize(25 , 25)); // 设置标题内容; void setTitleContent(QString titleContent , int titleFontSize = 9); // 设置标题栏长度; void setTitleWidth(int width); // 设置标题栏上按钮类型; void setButtonType(ButtonType buttonType); // 设置标题栏中的标题是否会滚动;具体可以看效果; void setTitleRoll(); // 设置窗口边框宽度; void setWindowBorderWidth(int borderWidth); // 保存/获取 最大化前窗口的位置及大小; void saveRestoreInfo(const QPoint point, const QSize size); void getRestoreInfo(QPoint& point, QSize& size); private: void paintEvent(QPaintEvent *event); void mouseDoubleClickEvent(QMouseEvent *event); void mousePressEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); // 初始化控件; void initControl(); // 信号槽的绑定; void initConnections(); // 加载样式文件; void loadStyleSheet(const QString &sheetName); signals: // 按钮触发的信号; void signalButtonMinClicked(); void signalButtonRestoreClicked(); void signalButtonMaxClicked(); void signalButtonCloseClicked(); private slots: // 按钮触发的槽; void onButtonMinClicked(); void onButtonRestoreClicked(); void onButtonMaxClicked(); void onButtonCloseClicked(); void onRollTitle(); private: QLabel* m_pIcon; // 标题栏图标; QLabel* m_pTitleContent; // 标题栏内容; QPushButton* m_pButtonMin; // 最小化按钮; QPushButton* m_pButtonRestore; // 最大化还原按钮; QPushButton* m_pButtonMax; // 最大化按钮; QPushButton* m_pButtonClose; // 关闭按钮; // 标题栏背景色; int m_colorR; int m_colorG; int m_colorB; // 最大化,最小化变量; QPoint m_restorePos; QSize m_restoreSize; // 移动窗口的变量; bool m_isPressed; QPoint m_startMovePos; // 标题栏跑马灯效果时钟; QTimer m_titleRollTimer; // 标题栏内容; QString m_titleContent; // 按钮类型; ButtonType m_buttonType; // 窗口边框宽度; int m_windowBorderWidth; // 标题栏是否透明; bool m_isTransparent; }; 
            
           
          
        

mytitlebar.cpp

#include "mytitlebar.h" #include 
         
           #include 
          
            #include 
           
             #include 
            
              #define BUTTON_HEIGHT 30 // 按钮高度; #define BUTTON_WIDTH 30 // 按钮宽度; #define TITLE_HEIGHT 30 // 标题栏高度; MyTitleBar::MyTitleBar(QWidget *parent) : QWidget(parent) , m_colorR(153) , m_colorG(153) , m_colorB(153) , m_isPressed(false) , m_buttonType(MIN_MAX_BUTTON) , m_windowBorderWidth(0) , m_isTransparent(false) { // 初始化; initControl(); initConnections(); // 加载本地样式 MyTitle.css文件; loadStyleSheet("MyTitle"); } MyTitleBar::~MyTitleBar() { } // 初始化控件; void MyTitleBar::initControl() { m_pIcon = new QLabel; m_pTitleContent = new QLabel; m_pButtonMin = new QPushButton; m_pButtonRestore = new QPushButton; m_pButtonMax = new QPushButton; m_pButtonClose = new QPushButton; m_pButtonMin->setFixedSize(QSize(BUTTON_WIDTH, BUTTON_HEIGHT)); m_pButtonRestore->setFixedSize(QSize(BUTTON_WIDTH, BUTTON_HEIGHT)); m_pButtonMax->setFixedSize(QSize(BUTTON_WIDTH, BUTTON_HEIGHT)); m_pButtonClose->setFixedSize(QSize(BUTTON_WIDTH, BUTTON_HEIGHT)); m_pTitleContent->setObjectName("TitleContent"); m_pButtonMin->setObjectName("ButtonMin"); m_pButtonRestore->setObjectName("ButtonRestore"); m_pButtonMax->setObjectName("ButtonMax"); m_pButtonClose->setObjectName("ButtonClose"); m_pButtonMin->setToolTip(QStringLiteral("最小化")); m_pButtonRestore->setToolTip(QStringLiteral("还原")); m_pButtonMax->setToolTip(QStringLiteral("最大化")); m_pButtonClose->setToolTip(QStringLiteral("关闭")); QHBoxLayout* mylayout = new QHBoxLayout(this); mylayout->addWidget(m_pIcon); mylayout->addWidget(m_pTitleContent); mylayout->addWidget(m_pButtonMin); mylayout->addWidget(m_pButtonRestore); mylayout->addWidget(m_pButtonMax); mylayout->addWidget(m_pButtonClose); mylayout->setContentsMargins(5, 0, 0, 0); mylayout->setSpacing(0); m_pTitleContent->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); this->setFixedHeight(TITLE_HEIGHT); this->setWindowFlags(Qt::FramelessWindowHint); } // 信号槽的绑定; void MyTitleBar::initConnections() { connect(m_pButtonMin, SIGNAL(clicked()), this, SLOT(onButtonMinClicked())); connect(m_pButtonRestore, SIGNAL(clicked()), this, SLOT(onButtonRestoreClicked())); connect(m_pButtonMax, SIGNAL(clicked()), this, SLOT(onButtonMaxClicked())); connect(m_pButtonClose, SIGNAL(clicked()), this, SLOT(onButtonCloseClicked())); } // 设置标题栏背景色,在paintEvent事件中进行绘制标题栏背景色; // 在构造函数中给了默认值,可以外部设置颜色值改变标题栏背景色; void MyTitleBar::setBackgroundColor(int r, int g, int b, bool isTransparent) { m_colorR = r; m_colorG = g; m_colorB = b; m_isTransparent = isTransparent; // 重新绘制(调用paintEvent事件); update(); } // 设置标题栏图标; void MyTitleBar::setTitleIcon(QString filePath, QSize IconSize) { QPixmap titleIcon(filePath); m_pIcon->setPixmap(titleIcon.scaled(IconSize)); } // 设置标题内容; void MyTitleBar::setTitleContent(QString titleContent, int titleFontSize) { // 设置标题字体大小; QFont font = m_pTitleContent->font(); font.setPointSize(titleFontSize); m_pTitleContent->setFont(font); // 设置标题内容; m_pTitleContent->setText(titleContent); m_titleContent = titleContent; } // 设置标题栏长度; void MyTitleBar::setTitleWidth(int width) { this->setFixedWidth(width); } // 设置标题栏上按钮类型; // 由于不同窗口标题栏上的按钮都不一样,所以可以自定义标题栏中的按钮; // 这里提供了四个按钮,分别为最小化、还原、最大化、关闭按钮,如果需要其他按钮可自行添加设置; void MyTitleBar::setButtonType(ButtonType buttonType) { m_buttonType = buttonType; switch (buttonType) { case MIN_BUTTON: { m_pButtonRestore->setVisible(false); m_pButtonMax->setVisible(false); } break; case MIN_MAX_BUTTON: { m_pButtonRestore->setVisible(false); } break; case ONLY_CLOSE_BUTTON: { m_pButtonMin->setVisible(false); m_pButtonRestore->setVisible(false); m_pButtonMax->setVisible(false); } break; default: break; } } // 设置标题栏中的标题是否会自动滚动,跑马灯的效果; // 一般情况下标题栏中的标题内容是不滚动的,但是既然自定义就看自己需要嘛,想怎么设计就怎么搞O(∩_∩)O! void MyTitleBar::setTitleRoll() { connect(&m_titleRollTimer, SIGNAL(timeout()), this, SLOT(onRollTitle())); m_titleRollTimer.start(200); } // 设置窗口边框宽度; void MyTitleBar::setWindowBorderWidth(int borderWidth) { m_windowBorderWidth = borderWidth; } // 保存窗口最大化前窗口的位置以及大小; void MyTitleBar::saveRestoreInfo(const QPoint point, const QSize size) { m_restorePos = point; m_restoreSize = size; } // 获取窗口最大化前窗口的位置以及大小; void MyTitleBar::getRestoreInfo(QPoint& point, QSize& size) { point = m_restorePos; size = m_restoreSize; } // 绘制标题栏背景色; void MyTitleBar::paintEvent(QPaintEvent *event) { // 是否设置标题透明; if (!m_isTransparent) { //设置背景色; QPainter painter(this); QPainterPath pathBack; pathBack.setFillRule(Qt::WindingFill); pathBack.addRoundedRect(QRect(0, 0, this->width(), this->height()), 3, 3); painter.setRenderHint(QPainter::Antialiasing, true); painter.fillPath(pathBack, QBrush(QColor(m_colorR, m_colorG, m_colorB))); } // 当窗口最大化或者还原后,窗口长度变了,标题栏的长度应当一起改变; // 这里减去m_windowBorderWidth ,是因为窗口可能设置了不同宽度的边框; // 如果窗口有边框则需要设置m_windowBorderWidth的值,否则m_windowBorderWidth默认为0; if (this->width() != (this->parentWidget()->width() - m_windowBorderWidth)) { this->setFixedWidth(this->parentWidget()->width() - m_windowBorderWidth); } QWidget::paintEvent(event); } // 双击响应事件,主要是实现双击标题栏进行最大化和最小化操作; void MyTitleBar::mouseDoubleClickEvent(QMouseEvent *event) { // 只有存在最大化、还原按钮时双击才有效; if (m_buttonType == MIN_MAX_BUTTON) { // 通过最大化按钮的状态判断当前窗口是处于最大化还是原始大小状态; // 或者通过单独设置变量来表示当前窗口状态; if (m_pButtonMax->isVisible()) { onButtonMaxClicked(); } else { onButtonRestoreClicked(); } } return QWidget::mouseDoubleClickEvent(event); } // 以下通过mousePressEvent、mouseMoveEvent、mouseReleaseEvent三个事件实现了鼠标拖动标题栏移动窗口的效果; void MyTitleBar::mousePressEvent(QMouseEvent *event) { if (m_buttonType == MIN_MAX_BUTTON) { // 在窗口最大化时禁止拖动窗口; if (m_pButtonMax->isVisible()) { m_isPressed = true; m_startMovePos = event->globalPos(); } } else { m_isPressed = true; m_startMovePos = event->globalPos(); } return QWidget::mousePressEvent(event); } void MyTitleBar::mouseMoveEvent(QMouseEvent *event) { if (m_isPressed) { QPoint movePoint = event->globalPos() - m_startMovePos; QPoint widgetPos = this->parentWidget()->pos(); m_startMovePos = event->globalPos(); this->parentWidget()->move(widgetPos.x() + movePoint.x(), widgetPos.y() + movePoint.y()); } return QWidget::mouseMoveEvent(event); } void MyTitleBar::mouseReleaseEvent(QMouseEvent *event) { m_isPressed = false; return QWidget::mouseReleaseEvent(event); } // 加载本地样式文件; // 可以将样式直接写在文件中,程序运行时直接加载进来; void MyTitleBar::loadStyleSheet(const QString &sheetName) { QFile file(":/Resources/" + sheetName + ".css"); file.open(QFile::ReadOnly); if (file.isOpen()) { QString styleSheet = this->styleSheet(); styleSheet += QLatin1String(file.readAll()); this->setStyleSheet(styleSheet); } } // 以下为按钮操作响应的槽; void MyTitleBar::onButtonMinClicked() { emit signalButtonMinClicked(); } void MyTitleBar::onButtonRestoreClicked() { m_pButtonRestore->setVisible(false); m_pButtonMax->setVisible(true); emit signalButtonRestoreClicked(); } void MyTitleBar::onButtonMaxClicked() { m_pButtonMax->setVisible(false); m_pButtonRestore->setVisible(true); emit signalButtonMaxClicked(); } void MyTitleBar::onButtonCloseClicked() { emit signalButtonCloseClicked(); } // 该方法主要是让标题栏中的标题显示为滚动的效果; void MyTitleBar::onRollTitle() { static int nPos = 0; QString titleContent = m_titleContent; // 当截取的位置比字符串长时,从头开始; if (nPos > titleContent.length()) nPos = 0; m_pTitleContent->setText(titleContent.mid(nPos)); nPos++; } 
             
            
           
         

// 窗口基类;

basewindow.h

#include 
          
            #include "mytitlebar.h" class BaseWindow : public QWidget { Q_OBJECT public: BaseWindow(QWidget *parent = 0); ~BaseWindow(); private: void initTitleBar(); void paintEvent(QPaintEvent *event); void loadStyleSheet(const QString &sheetName); private slots: void onButtonMinClicked(); void onButtonRestoreClicked(); void onButtonMaxClicked(); void onButtonCloseClicked(); protected: MyTitleBar* m_titleBar; }; 
          

basewindow.cpp

#include "basewindow.h" #include 
           
             #include 
            
              #include 
             
               #include 
              
                BaseWindow::BaseWindow(QWidget *parent) : QWidget(parent) { // FramelessWindowHint属性设置窗口去除边框; // WindowMinimizeButtonHint 属性设置在窗口最小化时,点击任务栏窗口可以显示出原窗口; this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowMinimizeButtonHint); // 设置窗口背景透明; setAttribute(Qt::WA_TranslucentBackground); // 注意!!!如果是主窗口不要设置WA_DeleteOnClose属性; // 关闭窗口时释放资源; setAttribute(Qt::WA_DeleteOnClose); // 初始化标题栏; initTitleBar(); } BaseWindow::~BaseWindow() { } void BaseWindow::initTitleBar() { m_titleBar = new MyTitleBar(this); m_titleBar->move(0, 0); connect(m_titleBar, SIGNAL(signalButtonMinClicked()), this, SLOT(onButtonMinClicked())); connect(m_titleBar, SIGNAL(signalButtonRestoreClicked()), this, SLOT(onButtonRestoreClicked())); connect(m_titleBar, SIGNAL(signalButtonMaxClicked()), this, SLOT(onButtonMaxClicked())); connect(m_titleBar, SIGNAL(signalButtonCloseClicked()), this, SLOT(onButtonCloseClicked())); } void BaseWindow::paintEvent(QPaintEvent* event) { //设置背景色; QPainter painter(this); QPainterPath pathBack; pathBack.setFillRule(Qt::WindingFill); pathBack.addRoundedRect(QRect(0, 0, this->width(), this->height()), 3, 3); painter.setRenderHint(QPainter::SmoothPixmapTransform, true); painter.fillPath(pathBack, QBrush(QColor(238, 223, 204))); return QWidget::paintEvent(event); } void BaseWindow::loadStyleSheet(const QString &sheetName) { QFile file(":/Resources/" + sheetName + ".css"); file.open(QFile::ReadOnly); if (file.isOpen()) { QString styleSheet = this->styleSheet(); styleSheet += QLatin1String(file.readAll()); this->setStyleSheet(styleSheet); } } void BaseWindow::onButtonMinClicked() { showMinimized(); } void BaseWindow::onButtonRestoreClicked() { QPoint windowPos; QSize windowSize; m_titleBar->getRestoreInfo(windowPos, windowSize); this->setGeometry(QRect(windowPos, windowSize)); } void BaseWindow::onButtonMaxClicked() { m_titleBar->saveRestoreInfo(this->pos(), QSize(this->width(), this->height())); QRect desktopRect = QApplication::desktop()->availableGeometry(); QRect FactRect = QRect(desktopRect.x() - 3, desktopRect.y() - 3, desktopRect.width() + 6, desktopRect.height() + 6); setGeometry(FactRect); } void BaseWindow::onButtonCloseClicked() { close(); } 
               
              
             
           

以上代码实现了自定义标题栏,新建的窗口类直接继承BaseWindow类,并对标题栏进行设置即可,下面就测试一下吧!

测试代码

NoFocusWidget.cpp

#include "nofocuswidget.h" NoFocusWidget::NoFocusWidget(QWidget *parent) : BaseWindow(parent) { ui.setupUi(this); // 初始化标题栏; initTitleBar(); } NoFocusWidget::~NoFocusWidget() { } void NoFocusWidget::initTitleBar() { // 设置标题栏跑马灯效果,可以不设置; m_titleBar->setTitleRoll(); m_titleBar->setTitleIcon(":/Resources/titleicon.png"); m_titleBar->setTitleContent(QStringLiteral("前行中的小猪-前行之路还需前行")); m_titleBar->setButtonType(MIN_MAX_BUTTON); m_titleBar->setTitleWidth(this->width()); } 

main.cpp

int main(int argc, char *argv[]) { QApplication a(argc, argv); NoFocusWidget w; w.show(); return a.exec(); } 

NoFocusWidget为新建的窗口类,通过继承了BaseWindow类,并在initTitleBar()方法中对标题栏进行设置即可。下图为NoFocusWidget窗口的设计图

这里写图片描述


动态效果图

这里写图片描述


最大化、还原效果图

这里写图片描述


注意

如果在设置窗口属性时不加上Qt::FramelessWindowHint 就是左图效果。

this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowMinimizeButtonHint);

这里写图片描述

如果不加上 Qt::WindowMinimizeButtonHint 就是左图效果。加上之后可以看右图效果。

这里写图片描述 这里写图片描述


以上代码用Qt实现了自定义窗口标题栏,代码很简单,但是很实用,可以应用到每一个窗口中去,保持每个窗口外观的一致性,同时自定义的标题栏也比系统自带的漂亮很多,所以还是非常实用的。

目前我们在MyTitleBar类以及BaseWindow类中只添加了一些基础功能,小伙伴们可以根据需要添加更多自定义的功能,而其他窗口只需继承BaseWindow类即可。

欢迎大家一起交流 O(∩_∩)O!

Qt训练营内容(一期),更多详细的文章有兴趣的小伙伴可以点击看一看哈,里面有更多优质的内容等着你!


代码下载

Qt 实现 自定义窗口标题栏

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/229679.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午4:08
下一篇 2026年3月16日 下午4:08


相关推荐

  • 汇编 常用_汇编指令详解

    汇编 常用_汇编指令详解
    常见的基本汇编书籍 

    Windows.环境下32位汇编语言程序设计(第2版) 
    http://www.happycampus.cn/docs/957100583237@hc10/275980/ 

    汇编语言编程艺术 

    Intel汇编语言程序设计(第四版) 

    Intel汇编语言程序设计(第五版)范例 
    http://download.csdn.net/source/1523425 

    2022年10月13日
    7
  • html5开发手机端网页(移动端web开发的几种方式)

    最近一直在研究移动手机网站的开发,发现做手机网站没有想象中的那么难。为什么会这么说呢?我们试想下:我们连传统的PC网站都会做,难道连一个小小的手机网站难道都搞不定吗?其实手机网站就是一个微缩版的PC网站罢了!至于为什么觉得难、觉得无从下手。段亮觉得有以下几点:一、没有完整的思路和流程就像做网站的流程一样,如果你能知道它的流程,我相信就不会觉得做手机网站难!真正难的是你没有思

    2022年4月18日
    53
  • SVN 安装与使用教程总结

    SVN 安装与使用教程总结转载 http www cnblogs com armyfai p 3985660 htmlSVN 简介 nbsp 为什么要使用 SVN nbsp nbsp nbsp nbsp nbsp nbsp 程序员在编写程序的过程中 每个程序员都会生成很多不同的版本 这就需要程序员有效的管理代码 在需要的时候可以迅速 准确取出相应的版本 Subversion 是什么 nbsp nbsp 它是一个自由 开源的版本控制系统 一组文件存放在中心版本库 记录每一

    2026年3月26日
    3
  • 多重共线性检验-方差膨胀系数(VIF)-相关系数(机器学习)sklearn

    多重共线性检验-方差膨胀系数(VIF)-相关系数(机器学习)sklearn文章目录多重共线性检验-方差膨胀系数(VIF)1、原理:2、多重共线性:3、检验方法:方差膨胀系数(VIF):相关性检验:4、代码测试4.1导入相关库4.2准备数据4.3计算膨胀因子4.4计算相关系数4.5分割测试集4.6模型选择4.7AUC值4.8模型调整4.8.1删除账户资金4.8.2删除累计交易佣金5、总结多重共线性检验-方差膨胀系数(VIF)1、原理:方差膨胀系数是衡量多元线性回归模型中多重共线性严重程度的一种度量。它表示回归系数估计量的方差与假设自变量间不线性相关时方差相比的比值。

    2022年6月9日
    50
  • matlab/simulink学习的笔记都总结在这里

    matlab/simulink学习的笔记都总结在这里simulink 中小方块与小箭头如何连接 小方块是电气线路 小箭头是信号流 他们之间是不能连接的 从信号到电气有受控源 从电气到信号有电压电流测量模块

    2026年3月17日
    2
  • T检验三种方法的区分

    T检验三种方法的区分之前的文章中SPSSAU已经给大家详细地介绍了方差分析,之后收到的一些反馈以及日常的答疑中,我们发现关于T检验三种方法的区分还有很多小伙伴搞不清楚,下面就结合着具体案例详细聊聊T检验的那点事。01.概念T检验是通过比较不同数据的均值,研究两组数据之间是否存在显著差异。02.分类不同的T检验方法适用于不同的分析场景,具体的分类如下:03….

    2022年6月19日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号