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<QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
b1.setParent(this);
b1.setText("close");
b1.move(80,80);
b2=new QPushButton(this);//给指针空间
b2->setText("abc");
//信号和槽
QObject::connect(&b1,&QPushButton::pressed,this,&MainWindow::close);
//自定义信号和槽
connect(b2,&QPushButton::released,this,&MainWindow::mywidge);
//
connect(b2,&QPushButton::released,&b1,&QPushButton::hide);
setWindowTitle("lao da");
b3.setParent(this);
b3.setText("qie huan");
b3.move(30,30);
//----------------------------
//w.show();
connect(&b3,&QPushButton::released,this,&MainWindow::changewin);
//-------------------------------w子窗口.接收子窗口信號
/*
connect(&w,&subwidget::mysignal,this,&MainWindow::dealsub);
connect(&w,&subwidget::mysignal,this,&MainWindow::dealslot);
*/
//信號重載時要区分带信号的是哪一个----------------------------------
void (subwidget::*funsignal)()=&subwidget::mysignal;
connect(&w,funsignal,this,&MainWindow::dealsub);
void (subwidget::*testsignal)( int,QString)=&subwidget::mysignal;
connect(&w,testsignal,this,&MainWindow::dealsub);
//Lambda:函数传参[]()-------------------------------------------
QPushButton *b4=new QPushButton(this);
b4->setText("Lambda:函数传参");
b4->move(70,70);
connect(b4,&QPushButton::released,
[=]() mutable//mutable可改写函数参数
{
b4->setText("345");
qDebug()<<"111111";
});
resize(500,500);
}
void MainWindow::mywidge()
{
b2->setText("123");
}
void MainWindow::changewin()
{
w.show();
this->hide();
}
void MainWindow::dealsub()
{
w.hide();//子窗口隱藏
this->show();
}
void MainWindow::dealslot(int a,QString str)
{
qDebug()<<a <<str;
}
MainWindow::~MainWindow()
{
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include<QPushButton>
#include"subwidget.h"
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
void mywidge();
void changewin();
void dealsub();
void dealslot(int,QString);
private:
QPushButton b1;
QPushButton *b2;
QPushButton b3;
subwidget w;
};
#endif // MAINWINDOW_H
subwidget.cpp
#include "subwidget.h"
subwidget::subwidget(QWidget *parent) : QWidget(parent)
{
setWindowTitle("lao er");
b.setParent(this);
b.setText("wwwwww");
connect(&b,&QPushButton::clicked,this,&subwidget::sendslot);
resize(500,500);
}
void subwidget::sendslot()
{
emit mysignal();//子窗口信號
emit mysignal(2,"my window");
}
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:
void mysignal();
void mysignal(int,QString);
private:
QPushButton b;
public slots:
};
#endif // SUBWIDGET_H
学习链接:https://www.bilibili.com/video/BV1t64y1f7d1?from=search&seid=3153538108006605763