Qt5学习笔记

Qt5 笔记

Qt配置问题

主界面->New Project -> 选择一个模板中选择 Application -> Qt Widgets Application -> location中 名称 自己新建项目的名字(主窗口的名字首字母大写:XxxXxx) -> 创建路径 随便选但是不能含有中文名字 -> Kits 中选择编译器(有MSVC2015 mingw 32bit 64bit) -> Details 类名 可以与新建项目名称一样,基类 有QMainWindow、QWidget、QDialog三个类 此时会自动产生 与类名一致的.h 、.cpp、.ui文件 -> 完成
->

  • QWidget所有窗口的父类,派生QMainWindow、QDialog
  • QDialog对话窗口,提示密码输入有误等只有一个红色×

中文乱码问题

编码格式问题,解决方法:Qt菜单栏 工具->选项->文本编辑器->行为->文件编码中 看是否是选择的UTF-8,一般选择后,重新新建项目就不会有中文乱码了。

常用快捷键

  • F4 .cpp与.h文件相互切换
  • 光标处+F1 查找Qt内部函数的帮助文档 两次F1 帮助文档全屏 退出 ESC
  • 光标处+F2 查找本项目中 函数的定义
  • Alt+光标选中移动 选中一列代码

Qt知识点问题

1.信号与槽问题

信号和槽都是函数,区别是信号不用实现,槽需要实现
形式:

connect(&Sender(信号发出者),&Send::signal(信号的发出者所属的类::发出的信号函数),&Reviewer(信号接收者),&Review::slot(信号接受者所属的类::槽函数));

槽函数中的参数≤信号函数中的参数
connect(&sender,&SubWidget::sig(a,b,c...),&reviewer,&QMainWindow::slot(m,n,k))
信号与槽函数对应关系非常灵活,可以一一对应,也可以一对多,多对一,可以信号即是发送者也是接受者,同一个信号可以连接多个槽函数。
信号重载
Qt5方法:信号与槽函数重载需要使用函数指针

eg:
    int fn(int a,long b);
    int (*fnnp)(int,long) = fn;//知fn有两个参数
    //若重载信号与槽函数,则需定义一个函数指针来分辨重载的信号与槽函数,以重载信号函数为例
    //在类SubWidget定义重载信号函数
    void sigSub();
    void sigSub(int,QString);
    //在类MainWidget定义重载的信号函数分别对应的槽函数
    void slotShow();
    void slotHide(int num,QString str);
    //定义函数指针区分重载的信号函数
    void(SubWidget::*MySig)() = SubWidget::sigSub;
    void(SubWidget::*MySigPlus)(int,QString) = SubWidget::sigSub;
    //连接重载信号与对应的槽函数
    SubWidget SubW;
    connect(&SubW,MySig,this,&MainWidget::slotShow);
    connect(&SubW,MySigPlus,this,&MainWidget::slotHide);

Qt4 方法(相比于Qt5 可以运行但不会报错)

//SIGNAL() SLOT() 宏 将函数传给字符串
//Qt4 槽函数必须以public/protected/private slot: 形式声明
connect(&subW,&SIGNAL(sigSub()),this,SLOT()slotShow()));
connect(&subW,&SIGNAL(sigSub(int,QString)),this,SLOT(slotHide(aa,bb)));
  • 信号与槽函数一一对应
    connect(&Sender(信号发出者),&Send::signal(信号的发出者所属的类::发出的信号函数),&Reviewer(信号接收者),&Review::slot(信号接受者所属的类::槽函数));
  • 信号与槽函数一对多
   void sigSub();
   //在类MainWidget定义单一信号函数对应的不同槽函数
   void answer();
   void answer(QString);
   //定义函数指针区重载的槽函数
   void(MainWidget::*MyAnswer)() = MainWidget::answer;
   void(MainWidget::*MyAnswerPlus)(QString) = MainWidget::answer;
   //连接重载信号与对应的槽函数
   SubWidget SubW;
   connect(&SubW,SubWidget::sigSub(),this,MyAnswer);
   connect(&SubW,SubWidget::sigSub(),this,MyAnswerPlus);
  • 信号连接信号(第二个信号的参数≤第一个信号的参数个数)
//发出信号,因为weituoLoveletter没有参数所以sendletter不能带参
connect(&xiaoming,&Boy::weituoLoveletter(),&xiaohong,&Girl::sendLetter());
//指定谁来处理小红的信号
connect(&xiaohong,&Girl::sendLetter(),&xiaolan,&Girl::reject());

2.ui文件

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    number(10),
    ui(new Ui::MainWindow)//c++初始化,可以在这定义 也可以写到下面的中括号里
{
    ui->setupUi(this);
    // number = 10;//在mainwindow.h 对其类已经做了定义 private :int intnumber;
}
  • 菜单栏输入中文
    在ui界面的右下方配置属性编辑器栏中找到 text选项 在其中输入中文即可,对菜单栏中按钮进行功能配置进行信号连接时,QAction触发一般是triggered
    connect(ui->actionOpen,&QAction::triggered,...);
  • 进行打开ui界面菜单栏file,需要#include,QFileDialog属于QWidgets模块,派生于QDialog,一般我们使用它的静态变量(Static Public Members),getExistingDirectory(获取已经存在的目录)、getOpenFileNames(获得存在的多个文件名)、getOpenFileName(获得存在的单个文件名)、getSaveFileName(保存文件)
//ui界面菜单栏:File->Open 功能是 打开D盘中的.jpg,.png图片格式的文件
connect(ui->actionOpen,&QAction::triggered,this,[=](){
        QString name = QFileDialog::getOpenFileName(this,"打开文件","D:\\","Image (.jpg,.png)");
        //打印出来
        qDebug()<<name.toUtf8().data();
    });
  • ui界面工具栏

可以直接将上面第一幅图中第二个红色箭头的actionSave用鼠标拖到工具栏处,其功能与菜单栏中的save功能一样。最后结果如图:

  • 浮动窗口
    ui界面中 左侧filter 中 Containers中的Dock Widget ,鼠标点击拖动到ui界面中 在运行后 ui界面中就会有一个可以拖动到外面的浮动窗口(像是VS中 属性管理器、解决方案管理器),并且浮动窗口中可以添加控件(如Buttons),在左侧的的对象中选中,然后在下面的属性窗口中对其名字windowTitle(名字)进行命名等;

  • 状态栏

  • <
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值