QT基础知识点总结

本文介绍了Qt编程的基础知识,包括跨平台特性、窗口类的使用如QWidget、QMainWindow、QDialog,以及信号与槽机制。强调了对象树在内存管理中的作用,详细阐述了如何创建和连接信号与槽,以及如何处理鼠标事件和定时器。此外,还讲解了常用控件如QPushButton、QDialog和QMessageBox的使用,以及文件读写、QPainter绘图和布局管理等实用技巧。
摘要由CSDN通过智能技术生成

一、基础知识点

  1. QT的优点:跨平台,接口简单/多,简化了内存回收机制(对象树)
  2. 注意点: 项目名称不能有空格和中文,不能有中文路径
  3. QT使用c++面向对象编程,有创建窗口三大基类:QWidget(空白窗口)、QMainWindow(有菜单栏工具栏等窗口)、QDialog(对话框)
  4. Main函数中,
   QApplication a;//(27 应用程序对象  在Qt中 有且仅有一个)
   MyWidget w; //窗口对象
   w.show(); //窗口显示
   return  a.exec();//进入消息循环机制,阻塞功能,即到这里就不动了,等待操作如关闭窗口
  1. .pro文件中
   QT += core gui      //Qt包含的模块
   TARGET = 01_QtFirst   //生成.exe程序的名称
    SOURCES += main.cpp\   //源文件
    HEADERS  += mywidget.h  //头文件
  1. 对象树:当创建的对象 指定的父亲是由QObject或者Object派生的类时候,这个对象被加载到对象树上,当窗口关闭掉时候,树上的对象也都会被释放,构造函数的e传递则是挂载在对象树上
  2. Qt中信号和槽

    ·信号: 返回值是void+只需声明不需要实现+可以重载

    ·槽函数: 返回值是void+需声明也需要实现+可以重载

·当信号和槽发生重载时候,需要利用函数指针明确指出函数地址: void(Teacher:: *teacherSignal)(QString) = &Teacher::hungry; 
teacherSignal替代下方的 &MyPushButton::clicked 

·connect ( 信号的发送者,发送的信号,信号的接受者,处理的槽函数)
connect( myBtn , &MyPushButton::clicked ,this, &MyWidget::close); 

·可以断开信号和槽  disconnect

·信号和槽函数的参数类型 必须一一对应,信号的参数个数 可以多余槽函数的参数个数,反之不可以 , 参数类型要一一对应

·Lambda表达式可做槽函数 
[=]()  -> type {}

二、小技巧

  1. 将QString 转为 char *: .toUtf8().data()

三、常用类(头文件)\事件\定时器\画家\文件管理

  1. QPushButton 父类是QAbstractButton 再父类是QWidget
    QPushButton * btn = new QPushButton;  //创建按钮对象
    btn->setParent(this); //将与窗口产生联系,不然就是单独的窗口
    //由于父类是QWidget,其本质也是一个窗口
    
    //常用成员函数,顾名思义
    setText
    move
    resize
    setFixedSize
    setWindowTitle
  1. MainWindow
//菜单栏  只能有一个
    QMenuBar* bar =  menuBar() //创建条
    setMenuBar(bar) ;设置到窗口中
    QMenu* menu = bar->addMenu(“文件”) //添加菜单
    QAction * newAction =  menu->addAction(“新建”);  //添加菜单项
    fileMenu->addSeparator();//添加分割线
//工具栏  可以有多个
    QToolBar* toolbar = new QToolBar();
    addToolBar(Qt::LeftToolBarArea,toolbar)  //添加到窗口中
    /*
        设置 只允许左右停靠、 setAllowedAreas
        设置浮动、 setFloatable
        设置移动  setMovable
    */
//状态栏  只能有一个
    QStatusBar * stBar = statusBar();
    setStatusBar(stBar);
    stBar->addWidget(label1); //左侧信息添加
    stBar->addPermanentWidget(label2); //右侧信息添加
//铆接部件 浮动窗口 可以有多个
    QDockWidget * dockWidget = new QDockWidget;
    addDockWidget(Qt::BottomDockWidgetArea,dock);  //添加到窗口中
    dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); //设置后期停靠范围
//核心部件  只能有一个
    setCentralWidget(edit);
  1. QDialog(对话框)
//模态:  不可以对其他窗口进行操作
    QDialog dlg(this);//直接用构造函数生成在对象树上
    QDialog * dlg2 = new QDialog(this);
    dlg.exec(); //阻塞
//非模态 可以对其他窗口进行操作
    QDialog * dlg2 = new QDialog(this);//重开,相当于另一个窗口了
    dlg2->show();
    dlg2->setAttribute(Qt::WA_DeleteOnClose);//设置属性,怕人没关闭窗口 一直点
  1. QMessageBox(标准对话框) 继承了QDialog
//利用静态成员函数可以弹出警告、询问、信息、错误对话框
//参数1:父窗口  参数2:标题  参数3:提示信息  参数4:按键类型  参数5:默认关联回车按键
    QMessageBox::Save == QMessageBox::question(this,"询问","question" , QMessageBox::Save | QMessageBox::Cancel ,QMessageBox::Cancel)
    //上面的语句的意思就是问用户选择的是不是保存
//返回值代表用户选择按钮
//下面是其他各种对话框,可以复制尝试,参数不懂去百度
    //颜色对话框
    QColor color = QColorDialog::getColor(Qt::red);
    //文件对话框
    QString fileName = QFileDialog::getOpenFileName(this,"打开文件","C:\\Users\\zhangtao\\Desktop","(*.doc)");
    //字体对话框
    QFont font = QFontDialog::getFont(&flag,QFont("华文彩云",36));
    qDebug() << "字体" << font.family().toUtf8().data() << "字号"<< font.pointSize()<< "是否加粗"<<font.bold() << "是否倾斜" << font.italic();
  1. 鼠标常用事件
EnterEvent//鼠标进入
LeaveEvent//鼠标离开
MousePressEvent//鼠标按下
MouseReleaseEvent//鼠标释放
MouseMoveEvent//鼠标移动
    if(ev->button()==Qt::LeftButton)//判断如果是左键
    ev->x()  ev->y() //获取 x y 坐标  
    if(ev->button()&Qt::LeftButton) //左键按住移动 比较特殊
    setMouseTracking(true)//设置鼠标追踪状态
  1. 定时器
定时器事件: 第一种定时器不推荐,省略
    //通过定时器类实现QTimer创建定时器对象 
    QTimer * timer1 = new QTimer(this);
    //开启定时器
    timer1->start(x毫秒)
    //每隔x毫秒 会抛出一个信号timeout出来
    connect(timer1,&QTimer::timeout,[=](){})
    //暂停定时器
    timer1->stop();
  1. 事件管理
事件分发器: 我们自己比较少去用他,知道事件是由他分发的,可以拦截,但不随意用
    用途:用于分发事件
    原型  bool  event(QEvent * e)if(e->type()==QEvent::MouseButtonPress)
    返回值如果是 true代表用户自己处理事件,不再向下分发
    其他的事件交给父类
    return QLabel::event(e)
事件过滤器: 更高级
    //步骤1  给控件安装过滤器
    ui->label->installEventFilter(this);
    //步骤2 重写过滤器事件 obj是区分控件,其余同事件分发器
    bool Widget::eventFilter(QObject * obj , QEvent * e)
  1. QPainter绘图
绘图事件  void paintEvent(QPaintEvent *);  //虚函数重载
    创建画家  QPainter  painter( this )  //this代表绘图设备
    画线、圆、矩形、文字
    设置画笔  QPen  painter.setPen()      设置笔宽度、风格
    设置画刷  QBrush  painter.setBrush()    设置画刷风格
绘图高级设置
    //设置抗锯齿
    painter.setRenderHint(QPainter::Antialiasing);
    //移动画家
    painter.translate(100,0);
    //保存画家状态
    painter.save();
    //取出画家状态
    painter.restore();
    //利用画家画资源图片
    painter.drawPixmap(posX,0,QPixmap(":/Image/Luffy.png"));
手动调用绘图事件
    1update()
绘图设备
    QPixmap	对不同的平台显示做了优化
    QImage 可以对像素级进行访问
    QPicture 记录和重新绘图指令	
  1. 文件读写
读文件
    QFile file(文件路径)
    file.open 指定打开方式   QIODevice::ReadOnly
    利用 file.readAll一次性全部读取
    利用 file.readLine 按行读取
    file.close 关闭文件对象
    //读取gbk格式,Unicode乱码
    QTextCodec * codec = QTextCodec::codecForName("gbk");
    codec->toUnicode(array)
写文件
    QFile file(路径)
    file.open(QIODevice::Append); //QIODevice::Append追加的方式写文件
    file.write("啊啊啊啊!");
    file.close();
  1. 文件信息类
    QFileInfo info(路径)
    info获取文件信息. 
    后缀名: suffix    文件大小  size   文件名 filename  文件路径 filePath
    创建日期  created   修改日期 lastModify   
    QDateTime  需要用 toString转为自己制定的输出格式

四、操作

  1. 添加资源文件 .qrc
  2. 界面布局 勾上新建的.u
常用控件
    QPushButton 最常用按钮,里面可以加图片
        QToolButton  工具按钮 用于显示图片
        toolButtonStyle 设置显示图片和文件
        autoRaise透明凸起效果
        RadioButton 单选按钮
        默认选中  setChecked(true)
        QCheckBox  复选按钮
        stateChanged 信号 
        未选中
        半选中
        选中
    QListWidget
        创建项 QListWidgetItem * item = new QListWidgetItem("锄禾日当午");
        将项加载到 控件中 
        ui->listWidget->addItem(item);
        设置对齐方式 item->setTextAlignment(Qt::AlignHCenter);
        ui->listWidget->addItems(list); 可以一次性放入所有内容
    QTreeWidget 树控件
        设置头
            ui->treeWidget->setHeaderLabels(QStringList()<<"英雄"<<"英雄简介");
        创建根项目
            QTreeWidgetItem * liItem = new QTreeWidgetItem(QStringList()<<"力量");
        将根项目添加到树控件中
            ui->treeWidget->addTopLevelItem(liItem);
        挂载子项目
            QTreeWidgetItem * l1 = new QTreeWidgetItem(heroL1);
            liItem->addChild(l1);
    QTableWidget 表格控件使用
        设置列  ui->tableWidget->setColumnCount(3);
        设置水平表头  ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"姓名"<<"性别"<<"年龄");
        设置行数  ui->tableWidget->setRowCount(5);
        设置正文 
        ui->tableWidget->setItem(,, new QTableWidgetItem(“字符串”));`
其他常用控件
    栈控件  
        ui->stackedWidget->setCurrentIndex(0);
    切换栈显示内容
    下拉框
        ui->comboBox->addItem("奔驰");
    设置选中 
        ui->comboBox->setCurrentIndex(2);
        ui->comboBox->setCurrentText("拖拉机");
    显示图片
        ui->label_img->setPixmap(QPixmap(":/Image/butterfly.png"));
    QLabel显示gif图片
        QMovie * movie =new QMovie(":/Image/mario.gif");
        ui->label_movie->setMovie(movie);
        movie->start();
自定义控件封装
    右键项目-添加新文件
    Qt-Qt设计师界面类
    在ui文件中设计自定义控件
    在主窗口中 拖拽 Widget做提升的操作
    在自定义控件中 封装对外接口
        SpinBox和 slider控件交互
        getData获取显示数字
        setData设置数字
  • 10
    点赞
  • 98
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 对于学习 qt 知识点整理思维导图非常有帮助。首先,思维导图可以帮助我们梳理 qt 的知识结构,帮助我们建立起一个清晰的知识体系。我们可以将 qt 的主要知识点作为中心思维节点,在周围分支出各个具体的知识点,形成一个完整的思维导图。这样,我们可以清楚地看到每个知识点之间的关系和联系,更好地理解 qt 的整体架构和工作原理。 其次,思维导图可以帮助我们更好地记忆和复习 qt 的知识点。通过在思维导图中加入关键词、示意图和简单的说明,我们可以将 qt 的知识点以一种直观的方式呈现出来。这样,在复习的时候,我们可以随时查看思维导图,回忆起相关的知识点,加深记忆。同时,思维导图可以帮助我们发现知识点之间的遗漏或者薄弱之处,有助于我们有针对性地进行重点复习。 最后,思维导图还可以帮助我们提高问题解决能力。在学习 qt 的过程中,我们遇到问题时可以将问题写在思维导图中,并找到与之相关的知识点。通过思考和整理,我们可以更深入地理解问题的本质和解决方法,提高自己的问题解决能力。 综上所述,使用思维导图学习 qt 知识点非常有效。它可以帮助我们梳理知识结构、加深记忆、提高问题解决能力,是我们学习 qt 不可或缺的工具之一。 ### 回答2: Qt是一个跨平台的C++应用程序开发框架,广泛应用于图形界面应用程序的开发。学习Qt时,整理思维导图是一种很好的学习方法。 首先,在思维导图中,我会列出Qt的基本概念和核心模块,包括信号和槽机制、窗口和控件、布局管理、事件处理等。了解这些基本概念可以帮助我建立起对Qt框架的整体认识。 接下来,我会将Qt框架中常用的模块和类进行分组,如图形界面相关的模块(如QWidgets、QPainter、QPixmap等),文件操作相关的模块(如QFile、QDir等),网络通信相关的模块(如QTcpSocket、QUdpSocket等),数据库操作相关的模块(如QSqlDatabase、QSqlQuery等)等。这样做可以让我更清晰地了解Qt框架中各个部分的功能和作用。 在每个模块中,我会进一步细分各个类的功能和使用方法,并在思维导图中进行标注。比如,对于QWidgets模块,我可以列举出常用的窗口类(如QMainWindow、QDialog等)和控件类(如QPushButton、QLineEdit等),并在其旁边注明它们的作用和常用的函数。 此外,在思维导图中,我还可以加入一些示例代码和链接,以加深对Qt知识点的理解和掌握。这样一来,我在学习Qt的过程中,可以通过查阅思维导图来对各个知识点进行回顾和巩固。 总的来说,用思维导图整理Qt知识点可以使我更加系统地学习和掌握Qt框架。将各个知识点有机地结合在一起,形成一个完整的思维导图,有助于我在实际应用开发中更加灵活和高效地运用Qt技术。 ### 回答3: QT是一种跨平台应用程序开发工具,它具有丰富的库和组件,可以帮助开发者快速创建图形用户界面和实现功能丰富的应用程序。学习QT时,可以使用思维导图进行知识点整理,以帮助我们更好地理解和记忆内容。 首先,在思维导图的中心,可以写上"QT"这个关键词,作为整个思维导图的核心。然后,可以根据QT的主要功能和特点,将知识点分为以下几个方面进行整理: 1. QT基础知识:首先要了解QT的基本概念和架构,比如QT的版本、主要组件等。可以列出QT的基本特点,如跨平台性、开源性等。 2. QT的常用类和模块:在思维导图的下方,可以列出QT的常用类和模块,包括QWidget、QLayout、QLabel、QPushButton等,以及常用的模块如图形、网络、数据库等。可以进一步展开每个类和模块,记录它们的特点和示例用法。 3. QT的信号与槽机制:QT的信号与槽机制是其重要的特性之一,可以通过思维导图来详细介绍这个机制的原理和使用方法。可以展示信号和槽的连接方式、参数的传递等。 4. QT的图形用户界面设计:QT提供了丰富的图形用户界面设计工具,如Qt Designer,可以在思维导图中列出图形用户界面设计的基本步骤和注意事项,比如窗口布局、控件的选择和使用等。 5. QT的常用功能和技巧:在思维导图的边缘,可以列出一些常用的QT功能和技巧,如界面国际化、线程处理、文件操作等。可以进一步展开每个功能和技巧,记录其实现方法和使用场景。 通过思维导图的整理学习,可以清晰地掌握QT的核心知识点,有助于开发者更好地理解和运用QT进行应用程序开发。同时,思维导图也可以帮助我们进行知识的巩固和复习,提高学习效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值