QT的学习
学习QT第一天的知识总结
一些基础知识
工程文件
-
项目文件里的注释用“#”注释。
-
有些头文件需要去模块里面寻找,所以,如果需要用头文件,需要在工程文件里面加入某些模块
例如:
我们需要用到这个头文件,那么,我们在头文件就需要加入
QT+=widgets
写程序的框架
#include<QApplication>
int main()
{
QApplication a(argc,argv);
//自己写的代码在这里
return a.exec();
}
//第一个QT程序(创建一个窗口)
步骤:
- 建立一个空项目
- 在工程文件中加入widgets模块
- 新建一个Main.cpp文件
- 在Main.cpp中写出程序框架
- 创建一个QWidget对象,a,然后调用他的setWindowTitle(QString("hello,QT"));
- 调用a.show();
//工程文件中的代码
QT+=widgets //自己加入的模块
SOURCES += \ //自动生成的代码
Main.cpp
//Main.cpp中的代码
#include <QApplication>
#include<QWidget>
int main(int argc,char **argv)
{
QApplication a(argc,argv);
//创建QWidget类对象
QWidget s;
//更改窗口的标题
s.setWindowTitle(QString("hello,QT!!"));
//显示窗口
s.show();
return a.exec();
//添加按钮
- 需要包含
这个头文件 - 建立一个QPushButton对象a.
- 调用a的setParent()函数,将主窗口设置为该按钮的父窗口
- 调用a的setText()函数,修改按钮里面的内容
#include <QApplication>
#include<QWidget>
#include<QPushButton>
int main(int argc,char **argv)
{
QApplication a(argc,argv);
//定义一个窗口对象
QWidget s;
//定义一个按钮对象
QPushButton x(&s);
//修改窗口的标题
s.setWindowTitle(QString("hell!!!o,QT!!"));
//固定窗口的大小
s.resize(300,300);
//为按钮设置父窗口
x.setParent(&s);
//设置按钮里面的内容
x.setText("hello");
//显示窗口
s.show();
return a.exec();
}
为对象设置父对象
上面的代码中我们为QPushButton类的对象设置了父对象,父对象有什么用?以及父对象怎么设?
设置父对象的方法
- 通过setParent()函数
例如:
QPushButton b;
b.setParent(&w);- 通过构造函数传参
例如:
QPushButton b(&w);
设置父对象有什么好处:
指定父对象之后,只要父对象显示,其子对象就会自动显示,不用调用子对象的show()函数,
例如:
Widget w;
QpushButton b(&w);
//b.show(); //这里的b.show()函数不用调用,因为已经制定了父对象
w.show();
信号和槽
用户对控件进行操作的时候会产生一些信号,需要connect()函数来使这些信号与某些函数进行关联,使这些信号发生后,函数做某些操作,这些函数就被成为槽函数。可以把这个机制类比为中断,信号就是类比为中断,槽函数类比为中断处理函数。(对了,同一个信号可以由多个槽函数接受)
QT中的基类
- QMainWindow:带菜单栏的窗口
- QWidget:很简单,什么都没有的窗口
- Qdialog:对话框,大小不能伸缩
QT中的一些特殊的关键字
- signals 关键字,这个关键字的作用是生命自定义信号的
- emit 信号:这个关键字的作用是发出相应的信号
一些函数
QPushButton类中的一些函数:
- move():作用是确定按钮的位置
- setTitle():作用是设置按钮上的内容
- setParent():作用是设置按钮的父对象
- show():作用是显示该按钮
- hide():作用是隐藏该函数
QWidget类中的一些函数
- resize():作用是固定窗口大小
- hide():作用是隐藏该窗口
- exec():作用是
- 进入时间循环
- wait,直到相应a可能的输入
- QT接收和处理用户及系统交代的时间(消息),并传递到各个窗口(这里感觉像是一个广播站,有任何消息发到这里,然后这个函数会将这个信息广播出去)
- 程序遇到exit()函数时,会返回exec()的值。
练习题
制作两个窗口,窗口1,窗口2,每个窗口各有一个按钮,程序运行时,先显示窗口1,当点击窗口1上的按钮后,窗口1隐藏,显示窗口2,当点击窗口2上的按钮时,窗口2隐藏,窗口1显示。
参考代码:
//mywidget.h 主窗口的头文件
#include "mywidget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyWidget w;
w.show();
return a.exec();
}
//subwidget.h 子窗口的头文件
#ifndef SUBQWIDGET_H
#define SUBQWIDGET_H
#include <QWidget>
#include <QPushButton>
class SubQWidget : public QWidget
{
Q_OBJECT
public:
explicit SubQWidget(QWidget *parent = nullptr);
void MySend();
signals:
void MySignal();
public slots:
private:
QPushButton change;
};
#endif // SUBQWIDGET_H
//mywidget.cpp //主窗口类
#include "mywidget.h"
MyWidget::MyWidget(QWidget *parent)
: QWidget(parent)
{
resize(300,300);
change.setParent(this);
change.setText("切换窗口");
sub.setWindowTitle(QString("hello,world"));
connect(&change,&QPushButton::released,this,&MyWidget::MyDeal);
//处理子窗口发过来的信号
connect(&sub,&SubQWidget::MySignal,this,&MyWidget::DealSub);
}
//析构函数
MyWidget::~MyWidget()
{
}
//MyDeal()函数,用来处理主窗口的切换按钮按下抬起的时间
void MyWidget::MyDeal()
{
//隐藏本窗口
this->hide();
//显示子窗口
sub.show();
}
//DealSub()函数,用来处理子窗口发过来的信号
void MyWidget::DealSub()
{
sub.hide();
this->show();
}
//subwidget.cpp 子窗口的类
#include "subqwidget.h"
SubQWidget::SubQWidget(QWidget *parent) : QWidget(parent)
{
resize(300,500);
change.setText("切换会主窗口");
change.setParent(this);
connect(&change,&QPushButton::released,this,&SubQWidget::MySend);
}
void SubQWidget::MySend()
{
emit this->MySignal();
}
//main.cpp
#include "mywidget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyWidget w;
w.show();
return a.exec();
}

浙公网安备 33010602011771号