qt的基础

简介

  • 跨平台的图形界面

  • 接口简单

  • 容易上手

  • 一定程度上简化了内存回收

    创建第一个Qt程序

    • 点击创建项目,选择项目路径以及给项目起名称
    • 名称,不能有中文,不能有空格
    • 路径,不能有中文路径
    • M默认创建窗口类,myWidget,基类有三种:QWidget,QMainwindow,QDialog

main函数

  • QApplication a 应用程序对象,有且只有一个
  • myWidget w 实例化窗口对象
  • w.show()显示窗口
  • return a.exec()让应用程序对象进入消息循环机制中,代码堵塞当前行

命名规范

  • 类名 首字母大写,单词和单词之间首字母大写
  • 函数名,变量名,首字母小写,单词与单词之间首字母大写

快捷键

  • 注释 ctrl+/
  • 运行 ctrl+r
  • 编译 ctrl+b
  • 字体的缩放 ctrl+鼠标的滚轮
  • 查找 ctrl+f
  • 整行移动 CTRL+shift +上
  • 帮助文档 F1
  • 自动对齐 ctrl+i
  • 同名之间的.h和.cpp切换 F4

帮助文档 第一种方式 F1 第二种方式左侧按钮

按钮控件常用的API

  • 创建QPushButton *btn =new QPushButton
  • 设置父亲 setParent(this)
  • 设置文本 setText(“文字”)
  • 设置位置 move(宽,高)
  • 重新制定窗口大小 resize,按钮也可以设置固定大小
  • 设置窗口标题 setWindowTitle
  • 设置窗口的固定大小 setFixedSize

对象树

  • 当创建的对象在堆区的时候,指定的父亲是QObject派生下来的类或者QObject子类派生下来的类,可以不用管理释放的操作,将对象会放入到对象树中,
  • 一定程度上简化内存回收机制

Qt的窗口坐标系

(0,0)在左上角

x以右为正方向

信号和槽

信号槽的优点,松散耦合,通过connect连接,耦合在一起

    //参数1:信号的发送者
    //参数2:发送的信号(函数的地址)
    //参数3:信号的接收者
    //参数4:处理的槽函数(
    connect(myBtn,&QPushButton::clicked,this,&myWidget::close);

自定义的信号和槽

自定义信号(写到signal下):只需要声明,不需要实现,可以有参数

自定义槽(写到slot下或者,public,或者全局函数下):需要声明,需要实现,可以有参数,可以重载

触发自定义的信号:emit 自定义的信号

自定义信号和槽出现重载

需要利用函数指针,明确指向函数的地址

	void(Teacher:: *teacherSignal)(QString)=&Teacher::hungry;
    void(Student:: *studentSlot)(QString)=&Student::treat;
    connect(zt,teacherSignal,st,studentSlot);
//QString->char* 先转化成QByteArray(.toUtf8())再转化char*()
qDebug()<<"请老师吃饭,老师要吃 "<< foodName.toUtf8().data();

信号可以连接信号

断开信号连接disconnect

一个信号可以连接多个槽函数

多个信号可以连接同一个槽函数

信号和槽函数的参数类型必须要一致

信号的参数个数可以多于槽函数的个数

Lambda表达式

用于定义并创建一个匿名的函数对象

[]标识符 匿名函数

& 引用传递

{} 实现体

mutable 修饰值传递的变量,可以修改拷贝的数据,改变不了本体

返回值 ->int{}();

QMainWindow

菜单栏最多只有一个

QMenuBar * bar=Menu bar();

setMenu bar(bar)

QMenu *fileMenu=bar->addMenu(“文件”);

工具栏,可以有多个

QToolBar *toolbar=new QToolBar(this)

//创建一个菜单栏,最多只有一个
    QMenuBar * bar=menuBar();
    //将菜单栏放到窗口中
    setMenuBar(bar);

    //创建菜单
    QMenu * fileMenu=bar->addMenu("文件");
    QMenu * editMenu=bar->addMenu("编辑");

    //创建一个菜单项
    fileMenu->addAction("新建");
    //添加分隔符
    fileMenu->addSeparator();
    fileMenu->addAction("打开");

    //工具栏。可以有多个
    QToolBar *toolBar =new QToolBar(this);
    addToolBar(Qt::LeftToolBarArea,toolBar);
    toolBar->setFloatable(false);

    toolBar->addAction("打开1");

    QPushButton * btn = new QPushButton("aa",this);
    toolBar->addWidget(btn);

状态栏

//状态栏,最多只有一个
    QStatusBar * stBar=statusBar();
    //设置到窗口中
    setStatusBar(stBar);
    //放标签控件
    QLabel * label = new QLabel("提示信息",this);
    stBar->addWidget(label);

    QLabel * label2 = new QLabel("右侧提示信息",this);
    stBar->addPermanentWidget(label2);

    //铆接部件(浮动窗口)
    QDockWidget * dockWidge=new QDockWidget("浮动",this);
    addDockWidget(Qt::BottomDockWidgetArea,dockWidge);
    //设置中心部件 只有一个
    QTextEdit * edit=new QTextEdit(this);
    setCentralWidget(edit);

资源文件

    //ui->actionnew->setIcon(QIcon("F:/anda2.jpg"));
    //使用Qt资源
    ui->actionnew->setIcon(QIcon(":/image/anda2.jpg"));

将图片文件拷贝到项目下

创建一个新文件,右键项目,Qt下的Qt resouce file 给资源文件起名

使用“:+前缀名+文件名”

对话框

    //点击新建,弹出对话框
    connect(ui->actionnew,&QAction::triggered,[=](){
        //对话框两种分类
        //模态对话框(不可以对其他的窗口进行操作),非模态对话框
        //模态创建
//        QDialog dlg(this);
//        dlg.exec();
        //非模态创建
        QDialog *dlg2 =new QDialog (this);
        dlg2->show();
        dlg2->setAttribute(Qt::WA_DeleteOnClose);//55号 属性

消息对话框

        //消息对话框
        //错误对话框
        //QMessageBox::critical(this,"cricital","错误");

        //信息对话框
        //QMessageBox::information(this,"info","信息");

        //提问对话框
        //参数1:父亲,参数2:标题,参数3:中间显示内容,参数4:按键的类型,参数5:默认关联回车的按键
        if(QMessageBox::Yes==(QMessageBox::question(this,"ques","提问"))){
            qDebug() <<"选择的yes";
        }
        
        //警告对话框
        QMessageBox::warning(this,"warning","警告");
        //其他标准对话框,颜色对话框
        QColor color=QColorDialog::getColor(QColor(255,0,0));
        qDebug()<< color;

树控件 QTreeWidget

    //treeWidget树控件的使用
    //设置水平的头
    ui->treeWidget->setHeaderLabels(QStringList()<<"英雄"<<"英雄简介");
    QTreeWidgetItem *liitem =new QTreeWidgetItem(QStringList()<<"力量");

    QTreeWidgetItem *item2 =new QTreeWidgetItem(QStringList()<<"敏捷");
    QTreeWidgetItem *item3 =new QTreeWidgetItem(QStringList()<<"智力");
    //加载顶层的节点
    ui->treeWidget->addTopLevelItem(liitem);
    ui->treeWidget->addTopLevelItem(item2);
    ui->treeWidget->addTopLevelItem(item3);

    //追加子节点
    QStringList h1;
    h1<<"猪"<<"吸收伤害";
    QTreeWidgetItem *li1 =new QTreeWidgetItem(h1);
    liitem->addChild(li1);

QTableWidget表格控件

    //TableWidget控件
    //设置列数
    ui->tableWidget->setColumnCount(3);
    //设置水平表头
    ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"姓名"<<"性别"<<"年龄");

    //设置行数
    ui->tableWidget->setRowCount(5);

    //设置正文
    //ui->tableWidget->setItem(0,0,new QTableWidgetItem("亚瑟"));

    QStringList nameList;
    nameList<<"亚瑟"<<"赵云"<<"张飞"<<"关羽"<<"花木兰";
    QList<QString> sexList;
    sexList<<"男"<<"男"<<"男"<<"男"<<"女";
    for(int i=0;i<5;i++){
        int col=0;
        ui->tableWidget->setItem(i,col++,new QTableWidgetItem(nameList[i]));
        ui->tableWidget->setItem(i,col++,new QTableWidgetItem(sexList.at(i)));
        //int 转为QString
        ui->tableWidget->setItem(i,col++,new QTableWidgetItem(QString::number(i+18)));
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值