Qt Creator (1)————初识Qt

本文介绍Qt框架的基础知识,包括创建首个Qt程序、理解父窗口与子窗口的关系以及信号与槽的概念。通过实例演示如何实现窗口间的信号传递及响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

对于Qt,它是一个跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展以及一些宏,Qt很容易扩展,并且允许真正地组件编程。


 

下面简要介绍一下

1.第一个Qt程序

注意:保存路径名不能包含中文字

        

 

        

    

            

 

2.父窗口和子窗口的区别(控件,部件,构件)

#include<QApplication>
#include<QWidget>       //窗口控件基类
#include<QPushButton>

int main(int argc,char **argv)
{
    QApplication app(argc,argv);

    QWidget w;
    w.setWindowTitle("HelloQt");  //设置标题

    QPushButton b;
    b.setText("^_^");             //给按钮设置内容
    b.setParent(&w);              //指定父对象
    b.move(100,100);              //移动坐标

    QPushButton b1(&w);           //通过构造函数传参
    b1.setText("*_*");

    w.show();

    app.exec();
    return 0;
}

 /   *     如果不指定父对象,对象和对象(窗口和窗口)没有关系,独立
     *     a指定b为它的父对象,a放在b的上面
     *     指定父对象,有2种方式:
     *                  1)setParent
     *                  2)通过构造函数传参
     *      指定父对象,只需要父对象显示,上面的子对象自动显示
     *  /

 

3.信号与槽

构造两个独立的窗口来解释信号与槽的关系

  main.cpp

#include "mainwidget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWidget w;          //执行MainWidget的构造函数
    w.show();

    return a.exec();
}

 

  mainwidget.cpp

  

#include "mainwidget.h"
#include <QPushButton>
#include <QDebug>           //

MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
{
    b1.setParent(this);
    b1.setText("close");
    b1.move(100,100);

    b2=new QPushButton(this);
    b2->setText("*_*");

    connect(&b1,&QPushButton::pressed,this,&MainWidget::close);

    connect(b2,&QPushButton::released,this,&MainWidget::mySlot);
    connect(b2,&QPushButton::released,&b1,&QPushButton::hide);      //隐藏按钮1


    setWindowTitle("老大");
    //this->setWindowTitle("老大");

    b3.setParent(this);
    b3.setText("切换到子窗口");
    b3.move(50,50);

    connect(&b3,&QPushButton::released,this,&MainWidget::changeWin);

    //处理子窗口的信号
    void (SubWidget::*funSignal)()=&SubWidget::mySignal;
    connect(&subWin,funSignal,this,&MainWidget::dealSub);

    void (SubWidget::*testSignal)(int,QString)=&SubWidget::mySignal;
    connect(&subWin,testSignal,this,&MainWidget::dealSlot);

    resize(400,300);
}

void MainWidget::dealSlot(int a,QString str)
{
    qDebug()<< a << str;
}

void MainWidget::mySlot()
{
    b2->setText("haha123");
}

void MainWidget::changeWin()
{
    //子窗口显示
    subWin.show();

    //本窗口隐藏
    this->hide();
}

void MainWidget::dealSub()
{
    //子窗口隐藏
    subWin.hide();

    //本窗口显示
    show();
}

MainWidget::~MainWidget()
{

}

 

 

  subwidget.cpp

#include "subwidget.h"

SubWidget::SubWidget(QWidget *parent) : QWidget(parent)
{
    this->setWindowTitle("小弟");
    b.setParent(this);
    b.setText("切换到主窗口");

    connect(&b,&QPushButton::clicked,this,&SubWidget::sendSlot);

    resize(400,300);
}

void SubWidget::sendSlot()
{
    emit mySignal();
    emit mySignal(250,"我是子窗口");
}

SubWidget::~SubWidget()
{

}

 

            

                

      红色箭头的按钮均可按压并触发信号与槽函数

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值