QT基本操作(简易教程)

QT 是一个跨平台的C++图形用户界面应用程序框架

这篇文章能教会你简单的使用QT。
1.初步了解
2.进一步了解
3.信号和槽
4.实现两个窗口的连接

1.初步了解:

创建项目:
在这里插入图片描述
(Widgets是部件的意思)Widgets Application 部件应用程序
在这里插入图片描述
(文件路径不能存在中文)
在这里插入图片描述
在这里插入图片描述

基类:
MainWindow 主要用于PC端(windows,带菜单栏)
QWidget 控件的基类
QDialog 对话框

了解一下:
父类 || 子类
基类 || 派生类

会生成一个 class MyWidget : public QWidget (MyWidget继承窗口基类QWidget)

接着下一步,完成

在这里插入图片描述
编译运行的方法:
图中的箭头。
快捷键: ctrl+r
在这里插入图片描述

.pro为项目文件


#-------------------------------------------------
#
# Project created by QtCreator 2019-06-04T18:33:58
#
#-------------------------------------------------

#模块,找模块,头文件按F1
QT       += core gui

#为了兼容QT4以前的版本
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

#应用程序的名字
TARGET = day_011
#指定makefile的类型,app,不用管
TEMPLATE = app

# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

//源文件 .cpp文件
SOURCES += \
        main.cpp \
        mywidget.cpp
//头文件 .h文件
HEADERS += \
        mywidget.h

右键点击.pro文件→在Explorer中显示
在这里插入图片描述
自动生成build…

.h头文件

会生成类MyWidget

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>

class MyWidget : public QWidget //光标对着QWidget,按F1跳到官方对应的文档
{
    Q_OBJECT //构造的函数,按F4可以看到对应的.cpp是空的
    //信号与槽的时候需要

public:
    MyWidget(QWidget *parent = 0);
    ~MyWidget();
};

#endif // MYWIDGET_H

main.cpp 主函数

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

int main(int argc, char *argv[])
{
    //有且只有一个应用程序类的对象
    QApplication a(argc, argv);
    //MyWidget继承于QWidget,QWidget是一个窗口基类
    //所以MyWidget也是一个窗口类
    //w就是一个窗口
    MyWidget w;

    //窗口默认是隐藏的,要显示出来
    w.show();
    
    //等于a.exec();return 0;
    //作用让程序一直执行,等待用户操作
    //等待事件发生
    return a.exec();
}

主要框架:
#include <QApplication>

int main(int argc, char *argv[])
{
    
    QApplication a(argc, argv);
    //我们写的代码
    return a.exec();
}

QT头文件的特点:

Qt头文件没有.h
头文件和类名一样
前两个要大写

QT的模块:

在这里插入图片描述

2.进一步了解:

创建空项目:
在这里插入图片描述
只生成一个项目文件(空的)
在这里插入图片描述
添加新文件
在这里插入图片描述
名字main.cpp

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

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QWidget w;
    w.setWindowTitle(QString("标题")); //设置标题

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

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

    QPushButton b1(&w);
    b1.setText("abc");

    w.show();
    return app.exec();
}

运行结果如图:
在这里插入图片描述
在这里插入图片描述
这个可以改编译环境。

3.信号和槽

创建一个新的项目:
main.cpp不改变它

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

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);  //会执行到这句话
    MainWidget w;  //执行MainWidget的构造函数,所以我们的main.cpp永远不用改
    w.show();

    return a.exec();  
}

点击工具→选项
在这里插入图片描述
用UTF-8

mainWidget.h文件:

#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>
#include <QPushButton>

class MainWidget : public QWidget
{
    Q_OBJECT

public:
    MainWidget(QWidget *parent = 0);
    ~MainWidget();

private:  //加上了这个
    QPushButton b1;
    QPushButton *b2;
};

#endif // MAINWIDGET_H

来到mainWidget.cpp

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


MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
{
    b1.setParent(this); //添加按键b1
    b1.setText("-_-");
    b1.move(100,100);

    b2 = new QPushButton(this); //指针要开内存,添加按键b2
    b2->setText("---");
}

MainWidget::~MainWidget()
{

}
下面,我们开始为按钮设置功能:
重点:信号和槽

查看库函数
将光标指向头文件QPushButton,按两下F1

在这里插入图片描述
点基类 QAbstractButton
在这里插入图片描述
在这里插入图片描述
点了有对信号的描述。

按esc退出。

在上面的mainWidget.cpp文件中加上connect(&b1, &QPushButton:: pressed, this, &MainWidget:: close);
即可实现按下关闭窗口。
光标移到close按F1
在这里插入图片描述
[slot] 代表槽

来看个例子:
首先,.h文件

#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>
#include <QPushButton>

class MainWidget : public QWidget
{
    Q_OBJECT

public:
    MainWidget(QWidget *parent = 0);
    ~MainWidget();

    void mySlot();//加了个定义函数
private:
    QPushButton b1;  //定义变量
    QPushButton *b2;  //定义变量
};

#endif // MAINWIDGET_H

main.cpp文件不变
mainWidget.cpp文件

#include "mainwidget.h"
#include <QPushButton>//按F1.再按F1


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);
    /* &b1:信号发出者,指针类型
     * &QPushButton:: pressed:处理的信号, &发送者的类名::信号名字
     * this:信号接收者
     * &MainWidget:: close: 槽函数,信号处理函数,&接收者类名::槽函数名字
    */
    /*自定义槽
     * Qt5任意的成员函数,普通全局函数,静态函数
     * 槽函数需要和信号一致(参数,返回值)
     * 由于信号都是没有返回值,所以,槽函数一定没有返回值
    */
   //按下b2时,b2内容变成123
    connect(b2, &QPushButton::released, this, &MainWidget::mySlot);
    //松开b2时,b1消失
    connect(b2, &QPushButton::released, &b1, &QPushButton::hide);
    
    /*信号,短信
     * 槽函数,接受短信的手机
    */
}

void MainWidget::mySlot(){  //自定义函数
    b2->setText("123");
}

MainWidget::~MainWidget()
{

}

结果:
在这里插入图片描述
按一下:
在这里插入图片描述

4.实现两个窗口的连接

新建窗口:选中项目文件夹,右击,添加新文件,c++,c++ Class,
在这里插入图片描述
文件夹就变成这样
在这里插入图片描述
这里有时候会爆出mainwidget.obj? error: LNK2019: 无法解析的外部符号 "public: __cdecl SubWidget::SubWidget(class QWidget *)…这样的错误,这时候就要将build文件删除,重新编译。

mainwidget.h
#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>
#include <QPushButton>
#include "subwidget.h"//子窗口头文件

class MainWidget : public QWidget
{
    Q_OBJECT

public:
    MainWidget(QWidget *parent = 0);
    ~MainWidget();

    //void mySlot();
    void changeWin();
    void dealsub();
    void dealSlot(int,QString);  
private:
    QPushButton b3;

    SubWidget subwin;//对象
};

#endif // MAINWIDGET_H

subwidget.h
#ifndef SUBWIDGET_H
#define SUBWIDGET_H

#include <QWidget>
#include <QPushButton>

class SubWidget : public QWidget
{
    Q_OBJECT
public:
    explicit SubWidget(QWidget *parent = nullptr);

    void sendSlot();
signals:
    /*信号必须有signals关键字来声明
     * 信号没有返回值,但可以有参数
     * 信号就是函数的声明,只需声明,无需定义
    */
    void mySignal();
    void mySignal(int ,QString);

public slots:

private:
    QPushButton b;
};

#endif // SUBWIDGET_H

mainwidget.cpp
#include "mainwidget.h"
#include <QPushButton>//按F1.再按F1
#include <QDebug>  //打印

MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
{
    setWindowTitle("boss");//等于this->setWindowTitle("boss");

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

    //显示子窗口
    //w.show();

    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){
    //str.toUtf8 -> 字节数组 QByteArray
    // ...data() -> QByteArray()
    qDebug() << a << str.toUtf8().Data();
}

void MainWidget::changeWin(){
    //子窗口显示
    subwin.show();
    //本窗口隐藏
    this->hide();
}

void MainWidget::dealsub(){
    //子窗口显示
    subwin.hide();
    //本窗口隐藏
    this->show();
}

MainWidget::~MainWidget()
{

}

subwidget.cpp
#include "subwidget.h"

SubWidget::SubWidget(QWidget *parent) : QWidget(parent)
{
    this->setWindowTitle("小弟");
    b.setParent(this);
    b.setText("切换到主窗口");
    b.move(50,50);
    connect(&b, &QPushButton::clicked, this, &SubWidget::sendSlot);
    //让窗口大小不变
    resize(400, 300);
}

void SubWidget::sendSlot(){

   emit mySignal();
   emit mySignal(250,"hello");  //重载的信息
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
主要步骤:
1.创建c++类文件。
2.主窗口切换到子窗口
1)在主窗口.h中声明一个按键
2)在主窗口.cpp中创建一个按键,按键连接this
3)在主窗口.h中声明一个函数,
4)在主窗口.cpp中自定义函数
3.子窗口切换到主窗口
1)在子窗口.h中声明一个按键
2)在子窗口.cpp中创建一个按键,按键连接this
3)在子窗口.h中声明一个函数,
4)在子窗口.cpp中自定义函数
5)把子窗口的.h 包含进主窗口.h中
6)在主窗口,h建立一个接收信号的函数和一个对象
7)在主窗口.cpp中写一个接收子窗口信号的连接(子窗口连接主窗口)
8)在主窗口.cpp中写一个接收子窗口信号后的函数

(按F4能切换头文件和cpp文件)

函数指针

void fun(int){
}

void (*p)(int) = fun;

在这里插入图片描述

如果获得了别人的代码,
在这里插入图片描述
需要把.user文件删除,(因为里面保存着路径)再编译运行

  • 171
    点赞
  • 1059
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
为了使更多的Qt初学者能尽快入门Qt,也为了QtQt Creator的快速普及,我们花费大量精力写出了这一系列教程。虽然教程的知识可能很浅显,虽然教程的语言可能不规范,但是它却被数十万网友所认可。我们会将这一系列教程一直写下去,它将涉及Qt的方方面面 一、Qt Creator的安装和hello world程序的编写 二、Qt Creator编写多窗口程序 三、Qt Creator登录对话框 四、Qt Creator添加菜单图标 五、Qt Creator布局管理器的使用 六、Qt Creator实现文本编辑 七、Qt Creator实现文本查找 八、Qt Creator实现状态栏显示 九、Qt Creator中鼠标键盘事件的处理实现自定义鼠标指针 十、Qt Creator中实现定时器和产生随机数 十一、Qt 2D绘图(一)绘制简单图形 十二、Qt 2D绘图(二)渐变填充 十三、Qt 2D绘图(三)绘制文字 十四、Qt 2D绘图(四)绘制路径 十五、Qt 2D绘图(五)显示图片 十六、Qt 2D绘图(六)坐标系统 十七、Qt 2D绘图(七)Qt坐标系统深入 十八、Qt 2D绘图(八)涂鸦板 十九、Qt 2D绘图(九)双缓冲绘图简介 二十、Qt 2D绘图(十)图形视图框架简介 二十一、Qt数据库(一)简介 二十二、Qt数据库(二)添加MySQL数据库驱动插件 二十三、Qt数据库(三)利用QSqlQuery类执行SQL语句(一) 二十四、Qt数据库(四)利用QSqlQuery类执行SQL语句(二) 二十五、Qt数据库(五)QSqlQueryModel 二十六、Qt数据库(六)QSqlTableModel 二十七、Qt数据库(七)QSqlRelationalTableModel 二十八、Qt数据库(八)XML(一) 二十九、Qt数据库(九)XML(二) 三十、Qt数据库(十)XML(三) 三十一、Qt 4.7.0及Qt Creator 2.0 beta版安装全程图解 三十二、第一个Qt Quick程序(QML程序) 三十三、体验QML演示程序 三十四、Qt Quick Designer介绍 三十五、QML组件 三十六、QML项目之Image和BorderImage 三十七、Flipable、Flickable和状态与动画 三十八、QML视图 三十九、QtDeclarative模块 四十、使用Nokia Qt SDK开发Symbian和Maemo终端软件 四十一、Qt网络(一)简介 四十二、Qt网络(二)HTTP编程 四十三、Qt网络(三)FTP(一) 四十四、Qt网络(四)FTP(二) 四十五、Qt网络(五)获取本机网络信息 四十六、Qt网络(六)UDP 四十七、Qt网络(七)TCP(一) 四十八、Qt网络(八)TCP(二)
### 回答1: Qt开发的简易CAD软件是一款基于Qt框架开发的用于绘图和设计的软件。它提供了丰富的绘图工具和功能,使用户能够创建和编辑2D图形。通过Qt的跨平台特性,这款软件可以在不同的操作系统上运行,包括Windows、Mac和Linux等。 这款简易CAD软件具有直观易用的界面,用户可以通过鼠标操作进行绘图和编辑。它提供了各种常见的绘图工具,如直线、圆、弧和多边形等,用户可以根据自己的需求选择合适的工具进行绘制。此外,软件还支持图层管理和对象选择,用户可以在不同的图层上绘制不同的图形,并可以对已绘制的图形进行改动或删除。 除了基本的绘图功能外,这款软件还具有一些高级功能,例如尺寸标注、坐标显示和图形变换。用户可以通过这些功能来检查和修正绘制的图形,确保其准确性和完整性。软件还支持文件导入和导出,用户可以将绘制的图形保存为常见的图像格式或矢量图格式,方便后续使用或共享。 总的来说,这款基于Qt开发的简易CAD软件具有简单易用的特点,用户无需具备专业的绘图技能即可使用。它提供了丰富的绘图工具和功能,方便用户进行各种绘图和设计任务。无论是初学者还是专业人士,都可以通过这款软件实现快速绘图和设计。 ### 回答2: Qt是一个跨平台的图形用户界面开发框架,可以用于开发各种类型的应用程序,包括CAD软件。简易CAD软件可以利用Qt的丰富功能和易于使用的API来实现。以下是一个关于用Qt开发的简易CAD软件的简介。 首先,Qt提供了强大的绘图功能,能够实现在绘图区域上进行图形的创建、修改和删除等操作。通过使用Qt的绘图工具和图形对象,可以实现线段、矩形、圆形等基本图形的绘制,并提供相关的编辑和变换功能。 其次,Qt的事件处理机制可以很好地响应用户的交互操作简易CAD软件可以通过Qt的鼠标事件和键盘事件来捕捉用户的操作,如鼠标点击、拖动和释放等动作,以及键盘的输入。通过这些事件的处理,用户可以方便地在绘图区域上进行图形的选择、移动和编辑等操作。 此外,Qt还提供了丰富的界面元素和布局管理器,可以帮助设计一个直观友好的用户界面。开发者可以利用Qt的UI设计工具,如Qt Designer,快速地创建和排列各种交互式控件,如按钮、菜单和工具栏等,以便用户可以轻松地进行工具的选择和切换。 最后,Qt还具备强大的扩展性和移植性。开发者可以根据需求,添加自定义的功能模块和插件,以满足更高级的CAD软件功能。而且,Qt的跨平台特性使得开发的简易CAD软件可以运行在各种主流操作系统上,如Windows、Linux和Mac OS等,为用户提供更好的使用体验。 总结来说,借助Qt的功能和特性,开发一个简易CAD软件变得更加简单和高效。Qt的绘图功能、事件处理、界面元素和跨平台能力为简易CAD软件提供了一个完善的开发框架,方便用户进行图形的创建、编辑和管理,同时提供了更好的用户体验和移植性。 ### 回答3: QT是一个跨平台的C++应用程序开发框架,它可以用来开发各种类型的应用程序,包括CAD软件。作为一个开发简易CAD软件的例子,我们可以使用QT来创建一个具有基本绘图功能的应用程序。 首先,我们可以使用QT的图形视图框架来创建一个绘图区域,通过鼠标交互实现绘图功能。用户可以选择不同的绘图工具,例如直线、矩形、圆等,然后在绘图区域中点击和拖动鼠标来绘制相应的图形。 其次,我们可以使用QT的GUI部件来创建一些控制按钮和菜单,用于实现常见的绘图操作,如撤销、重做、保存等。同时,我们还可以添加一些调色板或者属性编辑器,用于修改绘图元素的颜色、大小等属性。 另外,我们还可以使用QT的模型-视图框架来管理绘图元素的数据模型。通过这种方式,我们可以方便地进行图形的删除、移动、复制等操作,同时实现图形的选择和编辑功能。 为了提高用户体验,我们可以在QT中使用一些动画效果来增强绘图的交互性。例如,当用户绘制一条线段时,可以通过动画效果实时显示线段的形状和位置,以及开始和结束点的坐标。 总之,使用QT开发简易CAD软件可以快速实现绘图功能,并且具有良好的跨平台性能。无论你是在Windows、Mac还是Linux平台上使用这个软件,都可以得到相同的使用体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值