QT day1

2023-11-16

QQ图片20210810170200.jpg


一、QT基本框架

1、QT注意事项

QT文件路径必须要纯英文

2、QT类类型

  • QMainWindow(带有菜单栏目)
  • Qwidget(常用)

3、文件系统

1.jpg
main函数分析

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    \\有且只有一个应用程序对象
    QApplication a(argc, argv);
    \\继承于QMainWindow,为一个窗口
    MainWindow w;
    \\窗口默认隐藏,这里让他显示(可以用这个原理来设计隐藏窗口)
    w.show();
    \\a.exec()让用户输入,让窗口不会自动谈入
    return a.exec();
}

/*为了让代码简便,我们将函数功能写在类中,一般不写入main函数中!!!!*/

二、项目文件

1.jpg

1、工程模块.pro

对于一个新的模块需要添加qmake,可以通过在头文件中按F1查找。例如

#include <QWidget>  //需要添加QT += Widigets

这里的操作需要注意大小写以及+=符号的位置,否则会导致模块无法被识别

2、QT模块框架

2.jpg

  • QT Widget:最常用
  • Qt Webkit:浏览器引擎
  • Qt Test:测试单元
  • Qt SQL:数据库
  • Qt Quick/Qt QML: JS实现单元
  • Qt Multimedia Widget/Qt Mulitmedia:多媒体
  • Qt Network:网络通信

三、QT项目

1、.pro 文件配置

 Qt += widgets  //指定这个为图形化界面编程,引用QWidget

2、main.cpp

#include <QApplication>
#include <QWidget> //窗口控件基类

int main(int *argc,char **argv)
{
    QApplication app(argc,argv);
    QWigets w;
    w.setWindowTitle("这个标题"); //!!!!设置标题
    w.show();
    app.exec();
    return 0;
}

四、父窗口与子窗口操作

1、按钮控件

#include <QPushButton>
  • 定义:QPusheButton b;
  • 设置标题:b.setText(Qstring str);
  • 显示:b.show()
  • 指定父对象:b.setParent(&w);
  • 设置位置:b.move(100,100);

注意事项:

  1. 不用在构造函数中定义按钮,这样构造的按钮为局部变量,无法显示,应当在private 元素中定义
  2. 如果不指定父对象,那么按钮与界面将独立

2、两个独立窗口的定义

思路:在主窗口中定义一个private成员为subwindow类(继承于QWidget),在构造函数中定义利用show将其展示
窗口大小的定义:

resize(100,100);

五、信号与槽

为了让button在触发之后出现反应,我们需要用信号的形式传递出去

1、信号Signal

常用的信号:

  • clicked
  • released
  • pressed
  • toggled

自定义信号步骤:

  1. 在.h文件中的signals中定义信号名称
  2. 在调用中用emit mysignal()将信号发出

实例:
设计两个窗口,且每个窗口都有一个按钮时,我们希望按下按钮就可以切换到另外一个窗口,那么当子窗口切换到主窗口时无法发送信号,就需要自定义信号。
对于子窗口SubWidget中对象:

signal:
    void mysignal;
void sendsignal()
{
    emit mysignal();
}

在SubWidget.c中

/*此处b为SubWidget上面的按钮*/
connect(&b,&QPushButton::released,this,&SubWidget::sendsignal);

!!!关键词 emit 发送信号
信号的重载:
使用指向函数的指针进行实现!!

2、槽 slot

自定义槽步骤:

  1. 定义不同函数(任意成员函数,普通函数)
  2. 参数返回值为void

实例:

/*这里myslot为自己定义的槽函数*/
connect(&b,&QPustButton::released,&a,&MyWidget::myslot);

在MyWidget.h中:

public:
       void myslot();

在MyWidget.cpp中:

void MyWidget::myslot()
{
    //隐藏主窗口
    this.hide();
    //显示子窗口
    b.show();
}

3、connect连接信号和槽

connect(信号发出方地址,signal,信号接收方,slot);

实例:

QPushButton b;
QWidget a;
b.setParent(&a);
/*因为一般写入构造函数,&a一般用this指针*/
connect(&b,&QPustButton::released,&a,&QWidget::close);

注意事项:注意在slot和signal的时候要写入全局变量的引用

4、Lamda表达式

前期准备:
在.pro 文件中要加入

CONFIG += C++11

使用方法:

Lamda表达式详细解释(C++11)

connect(&b,&QPushButton:released,
        [=]()
        {
          qDebug()<<"Lamda表达式";  
        }
        )

六、坐标系统

move移动位置

七、带菜单栏的窗口(QMainWindow下)

1、菜单栏

//菜单栏
#include <QMenuBar>
#include <QMenu>
#include <QAction>
QMenuBar *MenuBar = menuBar(); //系统定义了menuBar()
//菜单
QMenu *PFile = MenuBar->addMenu("文件");
//添加菜单项(action)
QAction *PFile_new = PFile->addAction("新建");

QAction中的信号:

  • changed
  • hovered
  • toggled
  • triggered

处理代码
connect(PFile_new,&QAction::triggered,b,slot);//这里PFile_new为指针

2、工具栏

//工具栏添加快捷方式
#include <QToolBar>
#include <QPushButton>

QToolBar *toolBar = addToolBar("tool");

//添加快捷键
toolbar->addAction(PFile_new);

//添加小控件
QPushButton b;
b.setText("控件");
toolbar->addWidget(&b);

3、状态栏

#include <QStatusBar>
#include <QLabel>

{
    QStatusBar *Sbar = statusBar();//以及定义
    QLabel *label = new QLable(this);
    label -> setText("Normal text file");
    //addWidget从左往右添加
    Sbar->addWidget(label); //或者 Sbar->addWidget(new QLabel("2",this));

    //addPermanentWidget() 从右往左
}

4、文本编辑区

#include <QTextEdit>

QTextEdit *textedit = new QTextEdit(this);
setCentralWidget(textedit); //将文本编辑器放在中心

八、对话框

1、模态对话框

操作对话框同时无法操作之后的窗口

#include <QDialog>

{
    QDialog dlg;
    dlg.exec();
}

2、非模态对话框

操作时可以操作后面的窗口

#include <QDialog>

{
    //dlg当做成员,防止释放
    dlg.show();
}

3、标准对话框

是否/多个选项的对话框

#include <QMessageBox>

{
    //关于对话框(一个选项)
    QMessageBox::about(this,标题,内容);
    
    //问题对话框(多个选项)
    int re = QMessageBox::question(this,标题,内容,按钮1|按钮2|按钮3);
    /*这个对话框可以通过int变量接收结果*/
    switch(re)
    {
        case QMessageBox::Yes:
            操作1;
        case QMessageBox::No:
            操作2;    
    }
}

4、文件对话框

#include <QFileDialog>
{
    //获得文件名字
    QString str = QFileDialog::getOpenFileName(
        this,
        "open",                                       //标题
        "../",                                        //上一级路径
        "Text(*.txt *cpp);;Image(*png *jpg);;all(*.*)"      //指定文件类型
    )
}

九、复习(notepad++界面项目)

3.jpg

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT day1 的相关文章

随机推荐

  • kotlin高阶函数开发一个程序,统计文本中字符串出现的个数

    一 高阶函数是Kotlin的核心部分 下面来使用下高阶函数写一个程序 注意 我这里的File使用的是 与src同级的文件 你可以根据自己的需要 修改文件地址 代码实例 package net println kotlin chapter5
  • 如何完整地掌握一个机器学习模型

    如何完整地掌握一个机器学习模型 要全面地学习 掌握一个机器学习模型 可以遵循以下步骤 基础理论学习 了解该模型的背后数学原理和推导过程 包括假设 损失函数 优化方法等 学习算法实现 通过查阅论文 教程或开源代码 了解算法的具体实现过程 尝试
  • k8s的service资源类型有ClusterIP、Nodeport、ExternalName、LoadBalancer、Headless(None)

    1 ClusterIP 是什么 ClusterIP 是在所有节点内生成一个虚拟IP 为一组pod提供统一的接入点 当service存在时 它的IP地址和端口不会发生改变 客户端通过service的ip和端口建立连接 由service将连接路
  • 20221210 QT----信号和槽的使用

    信号和槽的使用 文章内容为B站 大轮明王讲Qt 的学习笔记 什么是信号 signal 以QPushButton为例 1 按下按钮时 会触发一个mousePressEvent事件 此时会发出一个pressed信号 2 松开按钮时 会触发一个m
  • 00后确实卷,公司新来的卷王,我们这帮老油条真干不过.....

    都说00后躺平了 但是有一说一 该卷的还是卷 这不 前段时间我们公司来了个00后 工作没两年 跳槽到我们公司起薪18K 都快接近我了 后来才知道人家是个卷王 从早干到晚就差搬张床到工位睡觉了 最近和他聊了一次天 原来这位小老弟家里条件不太好
  • Spring学习笔记 Spring JDBC框架

    Spring JDBC简介 先来看看一个JDBC的例子 我们可以看到为了执行一条SQL语句 我们需要创建连接 创建语句对象 然后执行SQL 然后操纵结果集获取数据 try Connection connection DriverManage
  • CGAL 最小点数约束的体素滤波

    目录 一 概述 二 代码实现 三 结果展示 一 概述 在CGAL 5 5版本中 grid simplify point set 中添加了一个新的可选命名参数min points per cell 通过在单元格中添加最小数量的点以便保留一个点
  • C++ deque底层原理

    deque底层原理 一 目的 二 底层实现 三 原理图 四 类结构 五 push back 六 pop back 一 目的 实现双端数组 二 底层实现 双向开口的连续线性空间 三 原理图 四 类结构 class deque protecte
  • nn.embedding笔记

    nn embedding介绍 embedding就是词嵌入 将一个token转化为一个向量 其通常作为nlp模型的一个层 我们通常使用的nn embedding通常分为两种情况 使用别人训练好的nn embedding 这个时候通过nn e
  • HCNA-Storage (H13-611)题库 v4.0

    Exam A QUESTION 1 以下关于华为 RAID2 0 技术 描述正确的是 多选 A 硬盘域中每个存储层的硬盘类型相同 B 硬盘的空间被划分成固定大小的块 C 用户可以为存储池 storage pool 中的每一个存储层分别设置
  • python_基础语法_find_查找字符,不存在则返回-1

    usr bin python3 str1 Runoob example wow str2 exam print str1 find str2 print str1 find str2 5 print str1 find str2 10 不存
  • android 通过usb读取 U盘

    关联 compile com github mjdev libaums 权限设置
  • 期货交易怎么做好风险控制?

    期货交易保证金机制还有期货自带杠杆的原理要求我们在期货交易过程中要更加注重风险的控制 因为杠杆机制下盈利与亏损都会被放大 不及时止损所带来的后果是很严重的 这是期货交易中的大忌 所以今天我们就来聊一聊期货交易中我们应该怎样做到风险控制 1
  • 理解容器和虚拟化技术

    容器和虚拟化 虚拟机 虚拟化技术 硬件虚拟化 虚拟机的基础架构 深层理解虚拟机 如何运行多个隔离应用 容器 容器技术 容器的作用 容器运行多个相互隔离的应用 docker为例 虚拟机和容器的区别 Docker 什么是docker docke
  • kube-apiserver 报错 Unable to authenticate the request“ err=“[x509: certificate signed by unknown ...

    问题描述 采用ansible 二进制方式部署kubernetes 部署完成后kubectl get node 节点状态 NotReady kubectl get pod n kube system 发现 calico 处于 Pending
  • linux ssh Unused,安装openssh-portable时遇到的问题及解决办法

    问题1 configure error Your OpenSSL headers do not match your library Check config log for details If you are sure your ins
  • [pytorch]关于cross_entropy函数

    loss F cross entropy output labels output 网络的全连接层的输出 值可能是有正有负的 例如 1 56 2 43 等 labels 正常标签 例如一共5个类别 值就是0 4
  • style-components使用

    目录 安装 创建全局样式文件 以js为后缀 组件中使用 为什么使用 style components style components最基础的用法就是以组件的形式编写样式 安装 npm install styled components 创
  • Qt 信号和槽函数

    信号和槽是一种高级接口 应用于对象之间的通信 它是 QT 的核心特性 当某个信号被发射 就需要调用与之相绑定的槽函数 这与Windows下的消息机制类似 消息机制是基于回调函数 一个回调即是一个函数的指针 因此如果希望一个处理函数通知一些事
  • QT day1

    一 QT基本框架 1 QT注意事项 QT文件路径必须要纯英文 2 QT类类型 QMainWindow 带有菜单栏目 Qwidget 常用 3 文件系统 main函数分析 include mainwindow h include