Qt-笔记

QT

1.qt快捷键

注释 ctrl+/

查找 ctrl+f

整行移动 ctrl+shift +↑或↓

自动对齐 ctrl+i

同名之间.h和.cpp切换 F4

2.QPushButton控件

show以顶层方式弹出窗口

创建按钮 QPushnButton *btn = new QPushButton(“第一个按钮”,this);

设置父类 (依靠) setParent(this)

设置文本 setText(“文字”)

设置按钮位置 btn.move(宽,高)

重新指定窗口大小且不可改变 setFixedSize(宽,高)

设置窗口标题 setWindowTitle(“标题”)

3.对象树

当创建的对象在堆区(即使用new)的时候,如果指定的父亲时QObject派生下来的类或者QObject子类派生下来的类,可以不用管理释放操作,对象会被放进对象树中

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

4.窗口坐标体系

左上角为(0,0)点

x以右为正方向

y以下为正方向

5.信号和槽

connect(信号的发送者,发送的信号(函数地址),信号的接收者,处理的槽函数(函数地址))

松散耦合

connect(mybtn,&MyQPushButton::clicked,this,&MyWidget::close)

或   

connect(mybtn,&QPushButton::clicked,this,&QWidget::close)
自定义信号

写到signals下

返回值为void

需要声明 不需要实现

可以有参数 可以重载

自定义槽函数

返回void

需要声明 也需要实现

可以有参数 可以重载

写到public slot下 或者 public 或者全局函数

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

当自定义信号和槽出现重载
1.需要利用函数指针 明确指向函数的地址
2.void(Teacher::tSignal)(QString)=&Teacher::hungry;
3.QString 转化成 char

.ToUtf8() 转化为 QByteArray
.Data() 转化为 char*
4.信号可以连接信号
5.断开信号 disconnect

一个信号可以连接多个槽函数
多个信号可以连接同一个槽函数
信号和槽函数的参数必须类型一一对应
信号的参数个数可以多于槽函数的参数个数

6.lambda表达式

[=](){}
= 值传递
& 引用传递
() 参数
{} 实现体

引用lambda函数
{}();

有返回值
->int{return 100;}

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

7.QMainWindow

菜单栏 最多只有一个
QMenu *bar = MenuBar();
setMenuBar(bar);    //this->setMenuBar(bar);
Qmenu * fileMenu = bar->addMenu("文件");//创建菜单
QAction *newAction = fileMenu->addAction("新建");//创建菜单项
可以添加分割线 fileMenu->addSeparator();

工具栏 可以有多个
QToolBar *toolbar = new QToolBar(this);
addToolBar(默认停靠区域,toolbar); Qt::LeftToolBarArea
设置后期停靠区域  设置浮动  设置移动

//后期设置为只能左右区域停靠
    toolBar->setAllowedAreas(Qt::LeftToolBarArea|Qt::RightToolBarArea);
    //设置为不允许浮动
    toolBar->setFloatable(false);
//设置是否可以移动
toolBar->setMovable(true);//总控制添加菜单项 或者添加小控件
一个用set 多个用add
状态栏  最多一个
QStatusBar * stBar = statusBar();
设置到窗口中 setStatusBar(stBar);
stBar->addWidget(label);放左侧信息
stBar->addPermanentWidget(label2); 放右侧信息
铆接部件  浮动窗口  可以多个
QDockWidget 
addDockWidget( 默认停靠区域,浮动窗口指针)
设置后期停靠区域
设置核心部件  只能一个
setCentralWidget(edit);

8.资源文件

将图片文件 拷贝到项目位置下
右键项目->添加新文件 –> Qt - > Qt recourse File - >给资源文件起名
res 生成 res.qrc
open in editor 编辑资源
添加前缀 添加文件
使用 “ : + 前缀名 + 文件名 ”

9.对话框

模态对话框

不可以对其他窗口进行操作 阻塞

QDialog dlg(this)
dlg.exec();//阻塞效果  完成后执行下一步
非模态对话框

可以对其他窗口进行操作
防止一闪而过 创建到堆区

QDialog *dlg2 = new QDialog(this);//无限创建时,堆区上的内容没有释放,可能导致内存泄露
dlg2->show();
dlg2->setAttribute(Qt::WA_DeleteOnClose);//55号 属性  关掉时,释放对象

注意:如果提示警告,有可能是弹出的窗口太小,重新设置窗口大小后可消除

10.消息对话框

标准对话框:消息对话框
QMessageBox 静态成员函数 创建对话框
返回值也是StandardButton类型,利用返回值判断用户输入

错误对话框
QMessageBox::critical(this,"critical","错误");
信息对话框
QMessageBox::information(this,"info","信息");
提问对话框
参数1 父亲 参数2 标题 参数3 显示内容 参数4 按键类型 参数5 默认关联回车按键
if(QMessageBox::save == QMessageBox::question(this,"ques","提问",QMessageBox::Save|QMessageBox::Cancel,QMessageBox::Cancel)){
	qDebug()<<"选择的是保存";
}else{
	qDebug()<<"选择的是取消";
}
警告对话框
QMessageBox::warning(this,"warning","警告");

11.其他对话框(简略版)

颜色对话框 QColorDialog::getColor
QColor color=QColorDialog::getColor(QColor(255,0,0));
​        qDebug()<<"red: "<<color.red()<<" green: "<<color.green()<<" blue: "<<color.blue();
文件对话框 QFileDialog::getOpenFileName
//文件对话框  参数1 父亲  参数2  标题  参数3 默认打开路径  参数4 过滤文件格式
        //返回值时选取文件的路径
        QString str = QFileDialog::getOpenFileName(this,"打开文件","D:\\桌面","(*.txt)");
        qDebug()<<str;
字体对话框 QFontDialog::getFont

//字体对话框
bool flag;
QFont font=QFontDialog::getFont(&flag,QFont(“华文楷体”,32));
qDebug()<<“字体:”<<font.family().toUtf8().data()<<" 字号:“<<font.pointSize()<<” 是否加粗:“<<font.bold()<<” 是否倾斜:"<<font.italic();

12.QTreeWidget控件

//设置头
    ui->treeWidget->setHeaderLabels(QStringList()<<"英雄"<<"英雄介绍");

//创建根节点
    QTreeWidgetItem *item=new QTreeWidgetItem(QStringList()<<"力量");//利用匿名对象(此处为List<string>对象),匿名对象的生存周期当使用完这个对象后就释放

//添加根节点到树控件上
    ui->treeWidget->addTopLevelItem(item);

//创建子节点的方法与创建根节点相同
    QTreeWidgetItem *it1=new QTreeWidgetItem(list);

//添加子节点到根节点上
    item->addChild(it1);

13.QTableWidget控件

//设置列数
    ui->tableWidget->setColumnCount(3);

//设置水平表头
    ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"姓名"<<"性别"<<"年龄");

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

//设置竖直表头
    ui->tableWidget->setVerticalHeaderLabels(QStringList()<<"1"<<"2"<<"3"<<"4"<<"5");

 //设置正文
    QList<QString> NameList;
    NameList<<"曹操"<<"刘备"<<"张飞"<<"关羽"<<"小乔";

​	ui->tableWidget->setItem(i,col++,new QTableWidgetItem(NameList[i]));

注意:QString转int类型可使用 QString::number(数值);

14.自定义控件封装

添加新文件 - Qt -设计师界面类 (.h .cpp .ui)

当函数有重载时可以使用函数指针找到要使用的函数

void(QSpinBox::* valuech)(int)=&QSpinBox::valueChanged;
    connect(ui->spinBox,valuech,ui->horizontalSlider,&QSlider::setValue);

15.Qt中的鼠标事件

鼠标进入事件 enterEvent()

鼠标离开时间 leaveEvent()

鼠标按下 mousePressEvent(QMouseEvent *ev) ev会返回坐标 ev->x() x坐标 ev->y() y坐标

鼠标释放 mouseReleaseEvent()

鼠标移动 mouseMoveEvent()

ev->button() 可以判断所有的按键 Qt::LeftButton Qt::RightButton

ev->Buttons() 可以判断组合按键 判断move的时候的左右键 结合 & 操作符

格式化字符串 QString(" %1 %2 ").arg(111).arg(222);

16.计数器

计时器1

利用事件 void timerEvent(QTimeEvent * ev)

启动定时器 startTimer(1000) 单位:毫秒

TimerEvent 的返回值是定时器的唯一标识 可以和ev->timerId()做比较 以此来确定执行哪一个计时器

定时器2

利用定时器类 Qtimer

创建定时器对象 QTimer *timer = new QTimer(this)

启动定时器 timer->start(1000) 单位:毫秒

每隔一定的时间,发送信号 timeout 进行监听

17.event事件分发器

用途:用于事件的分发 也可用于做拦截操作(不建议)

bool event(QEvent *e)

返回值 如果是true 代表用户处理这个事件,就不向下分发了

e->type()==鼠标按下

18.eventFilter事件过滤器

在程序将事件分发到事件分发器前,可以利用过滤器做拦截

步骤:1.给空间安装事件过滤器 ui->label1->installEventFilter(this);

​ 2.重写eventFilter函数(obj,ev) bool Widget::eventFilter(QObject *obj,QEvent *e);

19.QPainter绘图

绘图事件 void painEvent(QEvent *)

声明一个画家对象 QPainter painter(this) this 指绘图设备

画线、画图、画矩形、画文字

设置画笔 QPen pen 设置画笔宽度风格 pen.setStyle()

设置画刷QBrush brush 设置画刷 painter.setBrush(brush) 风格 brush.setStyle()

20.QPainter高级设置

抗锯齿  效率较低

painter.setRenderHint(QPainter::Antialiasing)

对画家进行移动

painter.translate(100,0);

保存状态   painter.save();

还原状态   painter.restore();

手动调用绘图事件  update()

利用画家画图片  painter.drawPixmap(x,y,QPixmap("图片路径"))

21.绘图设备

Pixmap绘图设备 专门为平台做了优化

QPixmap pix(300,300);
    //填充颜色
    pix.fill(Qt::white);
//声明画家
QPainter painter(&pix);
painter.setPen(QPen(Qt::green));
painter.drawEllipse(QPoint(150,150),100,100);
pix.save("D:\\pix.png");

QImage 绘图设备 可以对像素访问

   QImage image(300,300,QImage::Format_RGB32);
    image.fill(Qt::blue);
//声明画家
QPainter painter(&image);
painter.setPen(QPen(Qt::green));
painter.drawEllipse(QPoint(150,150),100,100);
image.save("D:\\image.png");//保存到磁盘

QPicture 绘图设备 可以记录和重现绘图指令

 QPicture pic;
    QPainter painter;
    painter.begin(&pic);
    painter.setPen(QPen(Qt::red));
    painter.drawEllipse(QPoint(150,150),100,100);
    painter.end();
pic.save("D:\\pic.zt");//这里的zt可以为任意后缀名

利用画图事件重现绘图指令

void Widget::paintEvent(QPaintEvent *){
    QPainter painter(this);
    QPicture pic;
    pic.load("D:\\pic.zt");
    painter.drawPicture(0,0,pic);

}

22.文件操作

    QString path=QFileDialog::getOpenFileName(this,"打开文件","D:\\Desktop");
        //将路径放入lineText中
        ui->lineEdit->setText(path);
    //编码格式类
    //QTextCodec * codec = QTextCode::codecForName("gbk");

    //读取内容 放入到textEdit中
    //QFile的默认格式是utf-8
    QFile file(path);//参数就是读取文件的路径
    //设置打开方式
    file.open(QIODevice::ReadOnly);

    QByteArray array=file.readAll();
    //将读取到的数据 放入textEdit中
    ui->textEdit->setText(array);
    //ui->textEdit->setText(codec->toUnicode(array));
  //对文件对象进行关闭
​        file.close();
​        
        //进行写文件
        file.open(QIODevice::Append);//用追加方式写文件
        file.write("aaaaa");
        file.close();

QFileInfo 文件信息类

QFileInfo info(path);
        qDebug()<<"大小:"<<info.size()<<" 后缀名:"<<info.suffix()<<" 文件名:"<<info.fileName();
        qDebug()<<"创建日期:"<<info.created().toString("yyyy/MM/dd hh:mm:ss");
        qDebug()<<"最后的修改日期:"<<info.lastModified().toString("yyyy/MM/dd hh:mm:ss");
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值