使用按钮的话要在头文件包含#include , 通过QPushButton类创建一个对象,通过调用这个类的方法来设置按钮的属性
#include "mainwindow.h"
#include <QApplication>
#include<QPushButton>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
QPushButton my_button;
my_button.setText("qinyifei"); //设置按钮上面的文字
my_button.show(); //按钮创建完成以后要show,不然的话按钮将无法出现
return a.exec();
}
运行结果
按钮的确出来了,但是不是在主窗口中,原因是因为子窗口没有指定父类
有两种方式可以指定父类
1. QPushButton my_button(&w); 2. my_button.setParent(&w);
首先我们要创立两个窗口,然后发送信号让他们通信
建立窗口 1
#include "mainwindow.h"
#include<QPushButton>
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{
this->setWindowTitle("boss"); //设置主窗口的标题
this->resize( QSize( 800, 600 ));// 初始化窗口的大小
b1.setParent(this);
b1.setText("A");//设置按钮上的文字
b1.setGeometry(100,100,50,20);//设置按钮的坐标以及大小,前两个参数为坐标,后两个参数为按钮的大小
}
建立窗口 2
要在项目那里添加class类
要继承Qwidget类
在新增的类的.cpp中创建新的窗口
#include "subwidge.h"
#include <QPushButton>
subwidge::subwidge(QWidget *parent) : QWidget(parent)
{
this->resize( QSize( 800, 600 ));// init adjust my size of window
this->setWindowTitle("didi");
b_s.setParent(this);
b_s.setText("to boss");
}
虽然两个窗口都已经创建成功了,但是这两个窗口之间没有联系,不能进行通信,并没有意义
在主窗口设置按钮的跳转的槽
connect(&b1,&QPushButton::pressed,this,&MainWindow::change_win);
其中 change_win函数的函数体为
void MainWindow::change_win()
{
w.show();//设置子窗口显示
this->hide();//本窗口隐藏
}
w的定义在mainwindow.h中,包含我们刚才创立的窗口的头文件,然后进行定义
subwidge w;
这样我们就在主窗口中包含了子窗口类型的变量,也就是有了 “联系”
此时我们已经可以在主窗口中切换的子窗口,但是点击子窗口中的按钮并不会切换到主窗口,原因是
子窗口中没有包含主窗口中的变量,没有形成“联系”,这要怎么办呢?
这里使用signal,点击子窗口中的按钮时候将会向本窗口中发送一个信号
在主窗口中我们将这个信号捕捉到,然后处理就可以实现 **“交流”**了
信号的定义和普通函数一样,只不过要属性要设置为signal
void my_signal();
点击子窗口时候触发函数my_solt
connect(&b_s,&QPushButton::clicked,this,&subwidge::my_solt);
void subwidge::my_solt()
{
emit my_signal();
}
这样我们就可以在主窗口中捕捉到这个信号了
完整代码如下:
.pro文件
#-------------------------------------------------
#
# Project created by QtCreator 2020-12-04T13:24:38
#
# from Mr.qin yifei
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = q
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp \
subwidge.cpp
HEADERS += mainwindow.h \
subwidge.h
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include<QPushButton>
#include"subwidge.h"
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
void my_solt();
void change_win();
void deal_sub();
~MainWindow();
private:
QPushButton b1;
QPushButton *b2;
subwidge w;
};
#endif // MAINWINDOW_H
subwidge.h
#ifndef SUBWIDGE_H
#define SUBWIDGE_H
#include <QWidget>
#include<QPushButton>
class subwidge : public QWidget
{
Q_OBJECT
public:
explicit subwidge(QWidget *parent = 0);
void my_solt();
signals:
void my_signal();
public slots:
private:
QPushButton b_s;
};
#endif // SUBWIDGE_H
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.cpp
#include "mainwindow.h"
#include<QPushButton>
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{
this->setWindowTitle("boss");
this->resize( QSize( 800, 600 ));// init adjust my size of window
b1.setParent(this);
b1.setText("A");
b1.setGeometry(100,100,50,20);
b2=new QPushButton(this);
b2->setText("B");
connect(&b1,&QPushButton::pressed,this,&MainWindow::change_win);
connect(&w,&subwidge::my_signal,this,&MainWindow::deal_sub);
w.show();
}
void MainWindow::deal_sub()
{
this->show();
w.hide();
}
void MainWindow::change_win()
{
w.show();
this->hide();
}
void MainWindow::my_solt()
{
b2->setGeometry(200,200,50,20);
}
MainWindow::~MainWindow()
{
}
subwidge.cpp
#include "subwidge.h"
#include <QPushButton>
subwidge::subwidge(QWidget *parent) : QWidget(parent)
{
this->resize( QSize( 800, 600 ));// init adjust my size of window
this->setWindowTitle("didi");
b_s.setParent(this);
b_s.setText("to boss");
connect(&b_s,&QPushButton::clicked,this,&subwidge::my_solt);
}
void subwidge::my_solt()
{
emit my_signal();
}