Qt學習(2)——創建第一個程序

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章