參考鏈接1:http://blog.csdn.net/skyhawk452/article/details/6121407
參考鏈接2:http://blog.csdn.net/memory_exception/article/details/50953005
信號與槽可以通過使用手寫代碼顯式的實現關聯 ,也可以運用 QMetaObject 類規定的槽 函數命名范式來實現自動關聯。
- 顯示關聯
-
class MyWidget : public QWidget { Q_OBJECT public: MyWidget(); signals: void buttonClicked(); private: QPushButton *myButton; }; MyWidget::MyWidget() { myButton = new QPushButton(this); connect(myButton, SIGNAL(clicked()), this, SIGNAL(buttonClicked()));
-
- 自動關聯
- 為了實現槽函數自動進行關聯,對於Qt窗口部件已經提供的信號,可按照以下規范命名:
void on_<窗口部件名稱>_<信號名稱>_(<信號參數>); - 看如下實例:
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QString a = "calculate"; setWindowTitle(tr("%1").arg(a)); //connect(ui->calButton,SIGNAL(clicked()),this,SLOT(on_calButton_clicked())); //QMetaObject::connectSlotsByName(this); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_calButton_clicked() { int a = (ui->firstLineEdit->text()).toInt() + (ui->secondLineEdit->text()).toInt(); ui->resultLineEdit->setText(tr("%1").arg(a)); }
- 若未能自動關聯,需要顯示調用connectSlotByName(),調用方法如上注釋處,詳細請參照官方幫助文檔:
- 為了實現槽函數自動進行關聯,對於Qt窗口部件已經提供的信號,可按照以下規范命名: