在全部代碼和槽函數所有寫好以後,進行編譯時居然報 No such slot xxxx,奇怪函數
Starting E:\01_project\03_C++\key\debug\key.exe...ui
Object::connect: No such slot MainWindow::GenerateKey() in mainwindow.cpp:26this
Object::connect: (sender name: 'btn_ok')spa
Object::connect: (receiver name: 'MainWindow')debug
Object::connect: No such slot MainWindow::ShowAbout() in mainwindow.cpp:28blog
Object::connect: (sender name: 'actionAbout')qt
Object::connect: (receiver name: 'MainWindow')it
因而將該connect鏈接信號和槽函數中的槽函數換成qt自帶的 close()函數,編譯成功進行操做對應的按鈕能正常觸發關閉,說明connect()函數沒問題,問題是出在槽函數這塊io
connect(ui->btn_ok,SIGNAL(clicked()),this,SLOT(GenerateKey())); connect(ui->actionExit,SIGNAL(triggered()),this,SLOT(close())); connect(ui->actionAbout,SIGNAL(triggered()),this,SLOT(ShowAbout()));
出現這個問題通常從下面幾個思路進行定位分析:編譯
一、信號和槽函數的類型是否一致,clicked()爲void類型,本身寫的GenerateKey()也爲void類型
二、信號和槽函數的參數類型是否一致,若是clicked(true)帶有參數,那麼槽函數也必需要帶上參數,必須同爲bool類型
三、信號和槽函數的名字是否有拼錯
四、槽函數是否有提早進行聲明,若是沒有聲明爲slots類型的話,connect()也會被認爲找不到槽函數
注:我上面遇到的問題就是未在頭文件中聲明 slots,因此就報錯了,添加了這個聲明以後,運行就正常了。
slots聲明以下:
public slots:
void GenerateKey();
void ShowAbout();