QT基础知识点总结

一、基础知识点

  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设置数字

你可能感兴趣的:(c++,qt)