指定父对象和信号与槽
指定父對象和信號與槽
文章目錄
- 指定父對象和信號與槽
- 1.指定父對象
- 2.信號與槽
1.指定父對象
參數:const QString &相當于string類型
作用:給窗口設置標題
參數:const QString &相當于string類型
作用:給按鈕設置內容
參數:整形值,是一個坐標
作用:設定位置,比如按鈕默認是在窗口的左上角,我們通過該函數改變按鈕的位置
參數:QWidget *parent傳遞一個窗口類型的指針
作用:指定父對象
假設下面一種場景:
a.如果沒有指定父對象,對象和對象(窗口和窗口)之間沒有任何關系,你會發現你的窗口和按鈕分別是兩個窗口,我們的目的是把按鈕放在窗口當中,所以此處就需要指定父對象,將按鈕放在窗口當中。
b.指定父對象的規則:a指定b為它的父對象,就將a放在b的上面
c.指定父對象的方法:1).setParent;2).通過構造函數傳參
d.指定父對象后只需要父窗口顯示,按鈕就不需要show了
在QT中,父對象/父窗口/父控件是一個意思,子對象/子窗口/子控件是一個意思
2.信號與槽
1. 梳理一下基本流程:
main.cpp中:
程序先執行QApplication a(argc, argv);完成引用程序基類的構造,再執行 MainWidget w;完成窗口對象的構造,再執行w.show();,顯示主窗口,最后執行return a.exec();阻塞等待用戶的操作。
2. 一些注意事項
a. 這就是main函數的基本框架,我們用戶自定義的功能都是在w這個派生類的構造函數當中完成 的
b.一種錯誤的代碼:
mainwidget.cpp:
你們決定這個程序會在窗口上顯示b1按鈕嗎???答案是不會,因為b1是構造函數的局部變量,出了這個作用域后就被銷毀,即執行完MainWidget w; 后就銷毀b1對象,還沒來的及執行w.show();,所以不會顯示b1按鈕。
c.注意QT中的指針是必須要new對象的,否則就會出錯。
mainwidget.h:
mainwidget.cpp:
#include "mainwidget.h"MainWidget::MainWidget(QWidget *parent): QWidget(parent) {b1.setParent(this);b1.setText("b1");b1.move(10,10);//b2->serParent(this);b2 = new QPushButton(this);b2->setText("b2");b2->move(99,99); }MainWidget::~MainWidget() {delete b2; }3. 信號與槽
到這里基本功能已經了解,但是我們有了按鈕,但是點擊按鈕并沒有反應,此處就引出信號與槽。
4. connect函數:
bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * member ) [static]| const QObject * sender | 信號誰發出的 |
| const char * signal | 發出什么信號 ,發送者的類名::信號的名字 |
| const QObject * receiver | 誰接收 |
| const char * member | 接受者干啥,信號處理函數,接受者的類名::槽函數名字 |
| 函數的作用 | 連接信號與槽,當信號發出者發出一個信號后,由接收者接收,當該信號被觸發時,接收者執行信號處理函數 |
5. 自定義槽函數
mainwidget.h:
#ifndef MAINWIDGET_H #define MAINWIDGET_H#include <QWidget> #include <QPushButton>class MainWidget : public QWidget {Q_OBJECTpublic:MainWidget(QWidget *parent = 0);~MainWidget();void MySolt();//自定義槽函數聲明 private:QPushButton b1;QPushButton* b2; };#endif // MAINWIDGET_Hmainwidget.cpp:
#include "mainwidget.h"MainWidget::MainWidget(QWidget *parent): QWidget(parent) {b1.setParent(this);b1.setText("close");b1.move(10,10);//b2->serParent(this);b2 = new QPushButton(this);b2->setText("99999");b2->move(99,99);/*void QAbstractButton::released()This signal is emitted when the button is released.void QWidget::hide()Hides the widget. This function is equivalent to setVisible(false).Note: If you are working with QDialog or its subclasses and you invoke the show() function after this function, the dialog will be displayed in its original position.*///關聯b2按鈕和主窗口,當按鈕抬起時執行MySolt自定義槽函數connect(b2,&QPushButton::released,this,&MainWidget::MySolt);//關聯b2按鈕和b1按鈕,當按鈕抬起時執行hide槽函數connect(b2,&QPushButton::released,&b1,&QPushButton::hide); }void MainWidget::MySolt()//自定義槽函數實現 {//將b2按鈕當中的內容換為666b2->setText("6666"); }MainWidget::~MainWidget() {delete b2; }總結
以上是生活随笔為你收集整理的指定父对象和信号与槽的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QT入门
- 下一篇: 两个独立的窗口和自定义信号