目录
1.QT创建文件
在Qt中,QMainWindow、QWidget和QDialog都是用于创建窗口的类,但它们之间有一些区别。
1.QMainWindow
QMainWindow是Qt中最高级别的窗口类,通常用于创建具有菜单栏、工具栏和状态栏的主窗口。它提供了一些与应用程序的主窗口相关的功能,例如,可以添加和删除菜单和工具栏,管理多个文档等。QMainWindow还提供了一些标准操作,如打开、保存、打印等,可以通过添加相应的插件来实现。
2.QWidget
QWidget是Qt中用于创建所有用户界面对象的基类。它提供了一些基本的窗口功能,例如,可以设置窗口的标题、大小、位置、背景等。QWidget通常用于创建次级窗口、对话框和控件等。
3.QDialog
QDialog是Qt中用于创建对话框的类。对话框是一种特殊的窗口,通常用于向用户显示一些信息或者让用户输入一些数据。QDialog提供了与对话框相关的功能,例如,可以设置对话框的标题、大小、模态或非模态等。
总结起来,QMainWindow通常用于创建主窗口,QWidget通常用于创建次级窗口和控件,而QDialog则用于创建对话框。
2.创建一个简单的窗口
首先我们创建了一个按钮页面,.h文件在QT中它是一种用于声明类、函数、变量和其他程序元素的文件扩展名。头文件通常包含在C++源文件(.cpp文件)之前,以便在编译时包含必要的声明和定义。
这段代码定义了一个名为Button的类,它继承自QPushButton并添加了一个名为randMove的槽函数。这个类可以用于创建自定义的按钮,并通过randMove槽函数实现特定的功能。
/*button.h*/
#include<QPushButton>
class Button : public QPushButton
{
Q_OBJECT
public:
explicit Button(QWidget *parent = nullptr);
signals:
public slots:
void randMove();
};
通过#include "button.h"调用其中的randMove函数,允许创建一个可以随机移动的按钮。每次调用randMove函数时,按钮都会移动到一个新的随机位置。
/*button.cpp*/
#include "button.h"
Button::Button(QWidget *parent) : QPushButton(parent)
{
}
void Button::randMove()
{
int x=rand()%400;
int y=rand()%200;
this->move(x,y);
}
这个Customer类定义了一个可以发出订单信号的对象,并且有一个槽函数来开始订单的处理。
/*customer.h*/
#include <QObject>
class Customer : public QObject
{
Q_OBJECT
public:
explicit Customer(QObject *parent = 0);
signals:
//本质:函数
void order();
void order(QString i);//信号的特点:返回值为void,只有声明没有定义,可以被重载
public slots:
void startOrder();
};
信号在Qt中是一个特殊的成员函数,用于通知其他对象某个事件已经发生。在这段代码中,Customer类的作用是发出订单信号,可能用于通知其他对象开始订单处理
/*customer.cpp*/
#include "customer.h"
Customer::Customer(QObject *parent) : QObject(parent)
{
}
void Customer::startOrder()
{
emit this->order();
emit this->order("鱼香肉丝");
}
这个Waiter类的作用是接收一个字符串参数,然后发出一个信号,通知其他对象某个事件已经发生。
/*waiter.h*/
#include <QObject>
class Waiter : public QObject
{
Q_OBJECT
public:
explicit Waiter(QObject *parent = 0);
signals:
public slots:
void answer(QString i);
void answer();
};
该类继承自Qt框架的QObject类。这个类有两个方法:answer()和answer(QString i)。
当调用answer时,会在控制台上输出 "您好,请点菜"
answer(string i) 方法接受一个QString类型的参数i。当调用这个方法时,会将传入的字符串i和 "好的" 一同输出到控制台。
/*waiter.cpp*/
#include "waiter.h"
#include<QDebug>
Waiter::Waiter(QObject *parent) : QObject(parent)
{
}
void Waiter::answer()
{
//输出
qDebug()<<"您好,请点菜";
}
void Waiter::answer(QString i)
{
qDebug()<<i<<"好的";
}
这段代码定义了一个名为Widget的类,该类继承自Qt框架的QWidget类。
/*QWidget.h*/
#include <QWidget>
#include<QPushButton>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
};
这段代码的功能是创建一个带有点菜按钮的窗口,并连接按钮的clicked信号到对应的槽函数。同时创建了顾客和服务员对象,并连接了信号和槽函数以实现点菜功能。
/*widget.cpp*/
#include "widget.h"
#include"button.h"
#include"customer.h"
#include"waiter.h"
#include"duanlian.h"
#include"fugui.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
//创建按钮对象
Button* btn=new Button();
btn->setParent(this);
btn->show();
//设置窗口对象的大小
this->resize(800,600);
btn->move(400,200);
//添加文字
btn->setText("点菜");
btn->resize(90,90);
//点击按钮关闭
//connect(btn,QPushButton::clicked,this,Widget::close);
//随机移动
connect(btn,QPushButton::clicked,btn,Button::randMove);
//自定义信号和槽
//饭店:服务员点菜:(顾客,点单,服务员,菜单)
Customer *c=new Customer;
Waiter *w=new Waiter;
//connect(c,Customer::order,w,Waiter::response);
//emit c.order();
//connect(btn,QPushButton::clicked,c,Customer::sendSignal);
//函数指针
void(Customer::*p)(QString)=Customer::order;
void(Waiter::*p1)(QString)=Waiter::answer;
void(Customer::*p2)()=Customer::order;
void(Waiter::*p3)()=Waiter::answer;
connect(btn,QPushButton::clicked,c,Customer::startOrder);
//connect(btn,QPushButton::clicked,c,p2);
//重载版本的信号和槽函数
connect(c,p,w,p1);
connect(c,p2,w,p3);
}
Widget::~Widget()
{
}
这个程序创建了一个Qt应用程序,并在其中显示了一个Widget对象。
show()
函数可以使窗口一直显示出来。然后启动了Qt的事件循环,等待用户交互或程序中的其他事件发生。
/*main.cpp*/
#include "widget.h"
#include <QApplication>
#include "time.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
srand(time(0));
Widget w;
w.show();
return a.exec();
}
上述代码代码的实现就是如下所示,这里点击一下点菜按钮这个按钮就会在你设置的随机值范围内调换位置。正常的程序运行的话可以设置点击按钮切换窗口显示,或者设置点菜隐藏通过按钮的点击在窗口中显示,使用qDebug的原因就是希望大家熟悉qDebug的用法以后在代码中遇到问题可以使用qDebug进行调试,
3.知识点总结
slots是Qt框架中的另一种机制,用于在对象之间进行同步通信。调用一个槽函数会立即执行相应的操作,而不会立即返回
signals 是Qt框架中的一种机制,用于在对象之间进行异步通信。当某个事件发生时,发出信号的对象会通知所有与之连接的接收器。
QObject 是Qt框架中的一个基础类,所有的Qt类都从该类派生。它提供了一些基本功能,比如生命周期管理、属性存储、事件处理等。
qDebug()是一个Qt特有的函数,用于在控制台输出信息。此外,为了使用qDebug(),需要包含Qt的输入/输出模块,因此代码中包含了<QDebug>头文件。