网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
//菜单栏
QStatusBar \*statusBar = statusBar();
statusBar->addWidget(label);
QMenuBar \*mBar=menuBar();
//添加菜单
Qmenu \*pFile=mBar->addMenu("文件");
//添加菜单项,添加动作
Qaction \*pNew=pFile->addAction("新建");
Connect(pNew,&Qaction::triggered,[=](){qDebug()<<"新建被按下";})
//添加分割线
pFille->addSeparator();
//工具栏:菜单项的快捷方式
QToolBar \*toolBar=addToolBar("toolBar");
//工具栏添加快捷键
toolBar->addAction(pNew);
11 状态栏、核心控件、浮动窗口
状态栏
QStatusBar \*statusBar = statusBar();
statusBar->addWidget(label);
核心控件
QTextEdit \*textEdit = new QTextEdit(this);
setCentralWidget(textEdit);
浮动窗口
QDockWidget \*dock = new QDockWidget(this);
addDockWidget(QT::RightDockWIdgetArea,dock);
12 模态与非模态
1 dialog.exec()模态
2 dialog.show 非模态
13 标准对话框、文件对话框
1 标准 QMessegeBox:关于about、问题question
2 文件对话框 QFileDialog
Qstring s=QFileDialog::getOpenFileName(this,"open","../“,"source(\*.cpp \*.h);;Text(\*.txt);;all(\*.\*)");
14 QT4与QT5
//QT4
Connect(button,SIGNAL(click()),this,SOLT(close()));
//QT5
Connect(button,&Qpushbutton::clicked,this,&widget::close);
Connect(button,&Qpushbutton::clicked,
[](){});
15 lambda构成
1 [],标识一个lambda的开始,=:值传递,&:引用传递
2 ()定义变量
3 变量可变,=时变量是const
4 异常
5 返回值
16 样式表
1 子部件,整个窗口,甚至整个应用程序
2 selector选择器:label.setStyleSheet("Qlabel:(color:red;)");
17 事件
1 鼠标,键盘,定时器
2 鼠标动作->转换成相应对象->交给event()函数->事件处理器 event()不直接处理事件,而是按照事件对象的类型分派给特定的事件处理函数(switch)
3 事件可以理解为一个中断,处理完又回到正在处理的程序中
4 事件处理函数全是虚函数,保护类型
5 鼠标事件里有坐标函数x()y()
6 QString格式化Qstring(“(%1,%2)”).arg(e->x()).arg->y());
7 键盘事件 e->key() == QT::Key_A获取键盘键值
18 定时器事件
1 如幻灯片、闹钟一般
2 处理函数
3 id = startTimer(1)毫秒为单位;指定id开始
4 杀死定时器killTimer(id);
19 事件的忽略与接收
1 事件与信号,例鼠标按下事件与鼠标按下信号,结果是事件接收后,如果没继续调用事件,事件不会往下传,就不会发送click信号。
2 处理关闭窗口事件,接收事件e->accept(),事件不会往下传递,不关闭窗口,忽略事件e->ignore(),事件传递给父组件 。
20 Event函数
1 只要是控件继承于QWidget,就有event(),控件都有event(),我们只需重写
2 QEvent里面有事件的type
3 事件分发过程
void MyWidget::event(Qevent \*e)
{
switch(e->type())
{
case QEvent::close;
closeEvent(e);
break;
case Qevent::MouseMove;
mouseMoveEvent(e);
break;
}
}
4 让事件按原来进行return Qwidget::event(e);当对某一类事件特殊处理时。
21 事件过滤器
bool eventFilter(Qobject \*obj,Qevent \*e)
{
//
}
1 事件先通过事件过滤器然后是事件操作
2 事件过滤器和被安装过滤器的组件必须在同一线程。
换句话说,多线程无效。
22 简单绘图
1 定义
QPainter p;//画家
p.begin(this);//指定设备
p.drawPixmap(0,0,width(),height(),QPixmap("../bg.png"));
p.end();
2 //画直线
//定义画笔/画刷(画笔可定义颜色等),把画笔/画刷交 给画家,然后画直线
Update()//间接调用paintEvent(),整个窗口都重绘,也可以指定范围
3 重写绘图事件,如果给窗口绘图,一定要在paintEvent()中
4 填充
p.fillrect(0,0,0,0,Qbrush(Qt::white))//通过画家
Pixmap.fill(Qt::white);//通过绘图设备
23 QPixmap与QBitmap
1 绘图设备:
Qbitmap 黑白
Qpixmap 彩色
2 区别:
Qpixmap:针对屏幕进行优化了,和平台相关
Qimage:和平台无关,可以对图片进行修改,在线程中绘图
Qpicture:保存绘图的状态(二进制文件)
24 绘图设备转换
//pixmap
//to Image
Qpixmap temp = Qpixmap::fromImage(image)
Qimage temp =pixmap.toImage();
25 不规则窗口
//去窗口边框
setWindowFlags(Qt::FramlessWindowHint | windowsFlages())
//把窗口设置为透明
setAttribute(Qt::WA TranslucentBackground)//设定属性
26 QFile
Qstring path=QFileDialog::getOpenFileName(this,"open","../","TXT(\*.txt)");
If(!path.isEmpty()){Qfile file(path);//文件对象
Bool isOK = file.open(QIODevice::ReadOnly);//打开文件
If(isOK){
//读文件,默认只识别utf-8
QByteArray array = file.readAll();
Ui->textEdit->setText(array);
//第二种读文件方法
QByteArray array;
While(!file.atEnd())
{
//读一行
array+=file.readline();
}
Ui->text->setText(array);
}
file.close();


**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.youkuaiyun.com/topics/618668825)**
..(img-5XjfYN2k-1715553392231)]
[外链图片转存中...(img-Y4FOsPvn-1715553392232)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.youkuaiyun.com/topics/618668825)**