qt初学(doing)

1.	跟随教程安装qt
2.	创建项目,并配置编译器(注意gcc,g++,cmake的安装与其地址,一般安装qt时一起安装在qt/qt5.14.2/Tools下,另外注意配置环境变量),此时应该已经能编译一个空窗口了
3.	使用qt Creator会自动帮你创建一个从QWidget上继承过来的派生类,一开始编译便可输出一个空窗口(当然可能要先初始化窗口大小等数据)
4.	初始化窗口大小 setFixedSize(640,1000);
设置标题 setWindowTitle("xxx");
5.	资源导入
导入到qrc 
创建一个.qrc文件
将图片等资源导入到.qrc文件中
CmakeLists.txt中添加该.qrc文件,具体为
file(GLOB_RECURSE QRC_SOURCE_FILES
${CMAKE_CURRENT_SOURCE_DIR}/*.qrc)
	set(RCC_FILES resource.rcc)
find_package(Qt5 COMPONENTS Widgets REQUIRED)
qt5_add_resources(QRC_FILES ${QRC_SOURCE_FILES})

add_executable(xxx项目名
	 ${QRC_FILES}
)
	
导入到rcc//rcc为二进制文件,比qrc文件小,运行更快
    先添加出.qrc文件
    把qt中自带安装好的rcc.exe文件添加到环境变量
    命令行运行”rcc -binary xxx.qrc -o xxx.rcc” 将qrc文件转化成rcc文件
	  将产生的.rcc文件放到qt中一个为该项目的deug的文件夹下(实际上文件在此处执行,要放到这里面才能被调用
    在主程序中添加
#include<QResource>
QResource::registerResource("./xxx.rcc");//main函数中
6.	添加图标(调用外部资源 .qrc/.rcc)
   Include<QIcon>
   setWindowIcon(QIcon(":/resource/xxx.ico"));//窗口对象的构造函数中,注意”:”开头表示虚拟路径,即.qrc/.rcc中所记录的路径
7.	可以考虑创建一个配置文件config.h记录一些通用的数据,如背景高度和宽度等
注意当新建了一个.h/.cpp文件之后要在CMakeLists.txt通过add_executable()中添加新的可执行文件(实际上添加的可执行文件不需要包括库,但加上也没错,且只有在其中加上后,qt Creator中才会显示该.h文件)
可以考虑在.h文件中定义需要的class及其中所需的函数,而在同名的.cpp文件中进行相应代码的实现
8.	设置定时器
   #include<qtimer.h>      //这个库中包含了定时器
   QTimer m_timer;         //创建一个定时器对象
   m_timer.setInterval(10);   //设置定时器间隔,单位为ms
m_timer.start();         //启动定时器
connect(&m_timer,&QTimer::timeout,[=](){
…
…//更改各种系数 
        update();//Qwidget类自带函数,可以更新一些数据,包括调用paintEvent(),mouseMoveEvent()
        //update()和Qtimer一起使用可以做到实时更新数据
}); //此处为timer使用方法,每隔一段时间执行lambda表达式
//(通过connect的一种写法,其格式基本为connect(槽(操作对象),信号,lambda表达式)
9.	图像输出方法
   在派生类中创建一个void paintEvent (QPaintEvent *event){}   
(它是Qwidget类中的虚函数,一般负责输出到屏幕,每次调用update()都会调用它)
#include<qpainter.h> //这个库包含了画家
在该函数中调用
    QPainter painter(this);//重建一个画家,把它和这个Qwidget窗口联系起来,通过它画出图片
    painter.drawPixmap(x,y,Map);
//其中x,y为int(像素),代表画出位置。Map为QPixmap类型,代表要画出的像素图(注: (0,0)在左上角,x是横轴,y是纵轴
    painter.drawPixmap(x,y,Map);//多个drawPixmap为依次画出
10.	监视鼠标方法
   在派生类中创建一个void Mainscene::mouseMoveEvent(QMouseEvent *event){}
(它也是Qwidget类中的虚函数,一般监控鼠标信息,每次调用update()都会调用它)
在该函数中调用
    int x=event->x();
    int y=event->y();
   即可获取当前鼠标点击位置。即每次update()时调用它,event->x/y()可以返回最近鼠标点击位置,当timer的间隔足够小时,即可看做实时点击位置
11.	设置背景
#include<Qpixmap>   //该库中包含Qpixmap
Qpixmap map1;        //创建一个Qpixmap的对象
map1.load(":/resource/xxx.webp");  //将外部图片导入转化成像素图存在map1中
接着只需要在paintEvent()函数中执行
painter.drawPixmap(0,0,map1);//在实时输出
注:可以把该map1封装到class background中
如要设置背景滚动可以通过调整x,y参数在printEvent()中实时更新背景(可以考虑插入两个相同的背景),(注:x,y可以为负数 or 超过屏幕宽度/高度,但超出部分不显示
12.	创建一个可以跟随鼠标点击位置移动的对象(图片)
     创建一个class,其中包含一个Qpixmap对象map1,load它,并在paintEvent()中执行输出(跟背景设置类似)
     为了实现跟随鼠标点击位置的效果,可以通过mouseMoveEvent()函数实时获取当前鼠标点击位置,并对该图片位置参数进行调整,在paintEvent()中依据该位置参数进行屏幕绘画
posted @ 2022-04-18 22:43  zhongzero  阅读(74)  评论(0编辑  收藏  举报