對于選擇qmake還是cmake,現在寫的暫時先用qmake
1.命名規范和快捷鍵
2.按鈕控件常用API
//創建第一個按鈕QPushButton * btn = new QPushButton;//讓btn對象 依賴在mywidget窗口中btn->setParent(this);//顯示文本btn->setText("第一個按鈕");//創建第二個按鈕 按照控件大小創建窗口QPushButton * btn2 = new QPushButton("第二個按鈕",this);//移動btn2按鈕btn2->move(100,100);//重設btn2按鈕大小btn2->resize(100,100);//重置窗口大小resize(600,400);//設置固定窗口大小setFixedSize(600,400);//設置窗口標題setWindowTitle("第一個窗口");
3.對象樹
????????當創建的對象在堆區時候,如果指定的父親是QObject派生下來的類或者QObject子類派生下來的類,可以不用管理釋放的操作,將對象會放入到對象樹中。一定程度上簡化了內存回收機制。
4.信號和槽
//需求 點擊我的按鈕 關閉窗口
//參數1 信號的發送者 參數2 發送的信號(函數的地址) 參數3 信號的接受者 參數4 處理的槽函數connect(myBtn, &MyPushButton::clicked , this , &MyWidget::close);
// connect(myBtn, &QPushButton::clicked , this , &QWidget::close);//也可以使用父類的地址
classIsOver();//發出信號 void Widget::classIsOver()
{//下課函數,調用后 觸發老師餓了的信號// emit zt->hungry();emit zt->hungry("宮保雞丁");
}
5.自定義信號和槽
//teacher.h中的teacher類中signals://自定義信號 寫道signals下//返回值是void,只需要聲明,不需要實現//可以有參數,可以重載void hungry();void hungry(QString foodName);//重載的函數//student.h中的student類中public slots://早期QT版本 必須要寫到public slots下,高級版本可以寫到public或全局下//返回值void,需要聲明,也需要實現//可以有參數,可以發生重載void treat();void treat(QString foodName);//重載的函數//調用重載的函數時//連接帶參數的信號和槽 出現了重載//指針 -> 地址//函數指針 -> 函數地址void(Teacher::*teacherSignal)(QString) = &Teacher::hungry;//函數指針void(Student::*studentSlot)(QString) = &Student::treat;//函數指針connect(zt, teacherSignal , st , studentSlot );classIsOver();
?調用QString時,輸出帶雙引號的處理方式
// qDebug() << "請老師吃飯,老師要吃:" << foodName;//輸出結果為 請老師吃飯,老師要吃: "宮保雞丁"//QString -> char * 先轉成QByteArray ( .toUtf8() )再轉char * ( .data() )qDebug() << "請老師吃飯,老師要吃:" << foodName.toUtf8().data();//輸出結果為 請老師吃飯,老師要吃: 宮保雞丁 //不帶引號
6.信號連接信號
//點擊一個 下課的按鈕 , 再觸發下課QPushButton * btn = new QPushButton("下課",this);this->resize(600,400);//點擊按鈕 觸發下課// connect(btn , &QPushButton::clicked, this, &Widget::classIsOver);// 無參信號和槽連接void(Teacher::*teacherSignal2)(void) = &Teacher::hungry;//函數指針void(Student::*studentSlot2)(void) = &Student::treat;//函數指針connect(zt, teacherSignal2 , st , studentSlot2 );//信號連接信號connect(btn , &QPushButton::clicked, zt, teacherSignal2);
斷開信號
disconnect(btn , &QPushButton::clicked, zt, teacherSignal2);//只有前邊的函數名不一樣
7.lambda表達式
//利用lambda表達式 實現點擊按鈕 關閉窗口QPushButton * btn2 = new QPushButton("關閉",this);btn2->move(200,0);connect(btn2,&QPushButton::clicked,this,[=](){emit zt->hungry("宮保雞丁");});//lambda表達式常用的形式就是[=](){}