QT基础操作

一、QT是一款跨平台的c++图形用户界面应用程序框架;

应用程序框架:封装好的各种类库,需要使用某种功能时,可以直接调用相应接口。

二、QT工程的创建

1.New Project ---> Application ---> QT Widgets Application ---> choose ---> 名称(不要包含中文名称) ---> 基类的选择;

基类:QMainWindow: 主要用于PC端,带菜单栏;

           QDialog: 对话框(不能伸缩);

           QWidget: 窗口控件(可以伸缩);

2、QT头文件特点:

  1. 头文件没有.h;
  2. 头文件和类名一样;

均以Q开头,且前两个字母均大写;

3、两个控件之间需要指定父对象才会有联系,否则为两个独立的窗口,无任何联系;

指定父对象有两种方法:

  1. obj.setParent(&Parent);  //指定obj的父类对象,将父类对象取址作为参数传入
  2. 通过构造函数传参: QPushButton b(&Parent);

指定父对象的好处:只需父对象显示,上面的子对象就会自动显示。

4、信号与槽:QT对象之间通信的接口

connect(&b, &QPushButton::pressed, this, &Widget::close);

四个参数均为指针类型,第一个参数为信号发出者,第二个参数为要发送的信号,第三个参数为信号的接收者,第四个信号为槽函数,对接收到的信号做出相应的处理(可以是库函数,也可以是自己定义的函数)。

 

两个窗口切换实例:

主控窗口头文件:

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton>
#include "subwidget.h"

class Widget : public QWidget
{
    Q_OBJECT   //宏声明,信号与槽函数使用所需
private:
    QPushButton b1;
    subWidget w;
public:
    Widget(QWidget *parent = 0);
    ~Widget();

    void changWindow();
    void deal();
};

#endif // WIDGET_H

子窗口头文件:

subwidget.h

#ifndef SUBWIDGET_H
#define SUBWIDGET_H

#include <QWidget>
#include <QPushButton>

class subWidget : public QWidget
{
    Q_OBJECT

private:
    QPushButton b;
public:
    explicit subWidget(QWidget *parent = 0);

    void sendslot();
signals:
    /* 信号必须由signals关键字声明(自定义信号)
     * 信号没有返回值,但可以有参数
     * 信号就是函数的声明,只需声明,无需定义
     * 使用:emit MySignal();
     */
    void mysignal();

public slots:
};

#endif // SUBWIDGET_H

main.cpp

#include "widget.h"
#include <QApplication>   //应用程序类

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);   //有且只有一个应用程序类的对象

    Widget w;    //继承于QWidget,QWidget是一个窗口基类,所以Widget也是窗口类      
    w.show();    //w就是一个窗口,创建的窗口默认隐藏,需要人为显示

    return a.exec();        
    //等价于a.exec(); return 0; 作用:让程序一直执行,等待用户操作,即等待事件的发生
}

主窗口构造函数的实现:

widget.cpp

#include "widget.h"
#include <QPushButton>

Widget::Widget(QWidget *parent): QWidget(parent)
{
    resize(400,300);            //设置窗体大小
    setWindowTitle("main");     //设置窗口名称,若不设置,默认为工程名
    b1.setText("切换到子窗口");  //设置按键显示的名称
    b1.setParent(this);         //指定按键的父类

    connect(&b1, &QPushButton::clicked, this, &changWindow);
    connect(&w, &subWidget::mysignal, this, &Widget::deal);
    //由于子类不含父类的对象,所以只能使用自定义信号建立联系,从子窗口切换回主窗口

Widget::~Widget()
{

}

void Widget::changWindow()
{
    hide();
    w.show();
}

void Widget::deal()
{
    w.hide();
    show();
}

子窗口构造函数的实现:

subwedget.cpp

#include "subwidget.h"

subWidget::subWidget(QWidget *parent) : QWidget(parent)
{
    resize(400,300);
    setWindowTitle("minor");
    b.setText("切换到主窗口");
    b.setParent(this);

    connect(&b, &QPushButton::pressed, this, &sendslot);
}

void subWidget::sendslot()
{
    emit mysignal();
}

附:

信号可以带参数,可以重载:如:

void dealsub();
void dealslot(int, QString);

在调用connect函数时,为避免二义性,应定义对应类型的函数指针指向不同的信号,如:

//对于重载的信号,要定义相同类型的函数指针,让指针做connect的参数就可以避免二义性。

void (SubWidget::* signal_1)() = &SubWidget::MySignal;  
connect(&w,signal_1, this, &Widget::dealsub);           

void (SubWidget::* signal_2)(int, QString) = &SubWidget::MySignal;
connect(&w,signal_2, this, &Widget::dealslot);

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值