1、指定父對象
指定父對象有個好處就是,父窗口顯示,子窗口自動顯示
首先,我們不在main.cpp中編輯,因爲主函數太長並不美觀,而在構造函數中寫。因爲要完成什麼功能是窗口來完成
接下來在mywidget.cpp中寫:
設置主窗口:
resize(600,600);//主窗口大小
//與 this->resize(100,100) 等價
this->setWindowTitle("計算器");//主窗口設定標
設定按鈕:
QPushButton b;
b.setText("111");
b.show();
此處有兩個問題:
1)這個按鈕的作用域只在構造函數,構造完按鈕就沒了,所以不存在按鈕
2)如果不指定父對象,對象與對象之間(窗口)沒有關係,互相獨立,如以上三行代碼
a指定b爲它的父對象,a在b的上面
指定父對象的方式:
2.1)setParent
使用這種方式要把按鈕設置爲成員變量
2.2)通過構造函數傳參
通過new 動態分配 缺點後面再說 指定父對象,只需要父對象顯示,上面的子對象自動顯示
private:
QPushButton b;
QPushButton *b1;
b.setText("close");//給按鈕設定內容
b.setParent(this);//指定父對象
b.move(100,100);//以左上角爲(0,0)
b.resize(50,20);//設定按鈕大小
//方式2
b1 = new QPushButton(this);
b1->setText("222");
在.h和.cpp中加入
2、標準信號和槽:
connect(&b,&QPushButton::pressed,this,&MyWidget::close);
/*
* & :信號發出者,指針類型
* &QPushButton::pressed: 處理的信號, &發送者的名字::信號名
* this: 信號接收者
* &MyWidget::close: 槽函數,信號處理函數 &接收的類名::槽函數名字
*/
connect(b1, &QPushButton::released, &b, &QPushButton::hide);
//信號:短信 槽函數:接受短信的手機
3、自定義信號和槽
自定義槽:
connect(b1, &QPushButton::released, this, &MyWidget::mySlot);
此處的mySlot()要在類中聲明爲成員函數,注意參數返回值一致
自定義信號:
404 NOT FOUND
4、Lambda表達式
connect(b1, &QPushButton::released,
// = : 吧外部的局部變量和類中的變量按值傳遞
[=]()
{
qDebug() << " 111 ";
}
);
/*
* Lambda表達式, 匿名函數對象
* C++11的新特性, 項目文件: CONFIG += C++11
*/
codes:
#include "mywidget.h"
#include <QPushButton>
#include <QDebug>
MyWidget::MyWidget(QWidget *parent)
: QWidget(parent)
{
resize(600,600);//主窗口大小
//與 this->resize(100,100) 等價
this->setWindowTitle("計算器");//主窗口設定標題
// QPushButton b;
// b.setText("111");
// b.show();
/*
* 此處有兩個問題:
* 1)這個按鈕的作用域只在構造函數,構造完按鈕就沒了,所以不存在按鈕
* 2)*如果不指定父對象,對象與對象之間(窗口)沒有關係,互相獨立,如以上三行代碼
* a指定b爲它的父對象,a在b的上面
* 指定父對象的方式:
* 1)setParent
* 使用這種方式要把按鈕設置爲成員變量
* 2)通過構造函數傳參
* 通過new 動態分配 缺點後面再說
* 指定父對象,只需要父對象顯示,上面的子對象自動顯示
*/
b.setText("close");//給按鈕設定內容
b.setParent(this);//指定父對象
b.move(100,100);//以左上角爲(0,0)
b.resize(50,20);//設定按鈕大小
//方式2
b1 = new QPushButton(this);
b1->setText("222");
connect(&b,&QPushButton::pressed,this,&MyWidget::close);
/*
* & :信號發出者,指針類型
* &QPushButton::pressed: 處理的信號, &發送者的名字::信號名
* this: 信號接收者
* &MyWidget::close: 槽函數,信號處理函數 &接收的類名::槽函數名字
*/
/*
* 自定義槽,普通函數的用法
* Qt5: 任意的成員函數,普通全局函數,靜態函數
* 槽函數需要和信號一致(參數,返回值)
* 由於信號都沒返回值,所以,槽函數一定沒有返回值
*/
connect(b1, &QPushButton::released, this, &MyWidget::mySlot);
connect(b1, &QPushButton::released, &b, &QPushButton::hide);
//信號:短信 槽函數:接受短信的手機
connect(b1, &QPushButton::released,
// = : 吧外部的局部變量和類中的變量按值傳遞
[=]()
{
qDebug() << " 111 ";
}
);
/*
* Lambda表達式, 匿名函數對象
* C++11的新特性, 項目文件: CONFIG += C++11
*/
}
void MyWidget::mySlot()
{
b1->hide();
}
MyWidget::~MyWidget()
{
}
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
#include <QPushButton>
class MyWidget : public QWidget
{
Q_OBJECT//信號和槽需要
private:
QPushButton b;
QPushButton *b1;
public:
MyWidget(QWidget *parent = 0);
~MyWidget();
void mySlot();
};
#endif // MYWIDGET_H