QT的学习

学习QT第一天的知识总结

一些基础知识

工程文件

  1. 项目文件里的注释用“#”注释。

  2. 有些头文件需要去模块里面寻找,所以,如果需要用头文件,需要在工程文件里面加入某些模块
    例如:
    我们需要用到这个头文件,那么,我们在头文件就需要加入
    QT+=widgets

写程序的框架

    #include<QApplication>

    int main()
    {
        QApplication a(argc,argv);

        //自己写的代码在这里

        return a.exec();

    }
        

//第一个QT程序(创建一个窗口)

步骤:

  1. 建立一个空项目
  2. 在工程文件中加入widgets模块
  3. 新建一个Main.cpp文件
  4. 在Main.cpp中写出程序框架
  5. 创建一个QWidget对象,a,然后调用他的setWindowTitle(QString("hello,QT"));
  6. 调用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();

//添加按钮

  1. 需要包含这个头文件
  2. 建立一个QPushButton对象a.
  3. 调用a的setParent()函数,将主窗口设置为该按钮的父窗口
  4. 调用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类的对象设置了父对象,父对象有什么用?以及父对象怎么设?

设置父对象的方法

  1. 通过setParent()函数
    例如:
    QPushButton b;
    b.setParent(&w);
  2. 通过构造函数传参
    例如:
    QPushButton b(&w);

设置父对象有什么好处:
指定父对象之后,只要父对象显示,其子对象就会自动显示,不用调用子对象的show()函数,
例如:

        Widget w;
        QpushButton b(&w);
        //b.show();         //这里的b.show()函数不用调用,因为已经制定了父对象
       w.show();

信号和槽

用户对控件进行操作的时候会产生一些信号,需要connect()函数来使这些信号与某些函数进行关联,使这些信号发生后,函数做某些操作,这些函数就被成为槽函数。可以把这个机制类比为中断,信号就是类比为中断,槽函数类比为中断处理函数。(对了,同一个信号可以由多个槽函数接受)

QT中的基类

  1. QMainWindow:带菜单栏的窗口
  2. QWidget:很简单,什么都没有的窗口
  3. Qdialog:对话框,大小不能伸缩

QT中的一些特殊的关键字

  1. signals 关键字,这个关键字的作用是生命自定义信号的
  2. emit 信号:这个关键字的作用是发出相应的信号

一些函数

QPushButton类中的一些函数:

  1. move():作用是确定按钮的位置
  2. setTitle():作用是设置按钮上的内容
  3. setParent():作用是设置按钮的父对象
  4. show():作用是显示该按钮
  5. hide():作用是隐藏该函数

QWidget类中的一些函数

  1. resize():作用是固定窗口大小
  2. hide():作用是隐藏该窗口
  3. exec():作用是
    1. 进入时间循环
    2. wait,直到相应a可能的输入
    3. QT接收和处理用户及系统交代的时间(消息),并传递到各个窗口(这里感觉像是一个广播站,有任何消息发到这里,然后这个函数会将这个信息广播出去)
    4. 程序遇到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();


}


posted @ 2019-11-24 14:50  笼包叔叔  阅读(244)  评论(0)    收藏  举报