在所有代碼和槽函數全部寫好之后,進行編譯時竟然報 No such slot xxxx,奇怪
Starting E:\01_project\03_C++\key\debug\key.exe...
Object::connect: No such slot MainWindow::GenerateKey() in mainwindow.cpp:26
Object::connect: (sender name: 'btn_ok')
Object::connect: (receiver name: 'MainWindow')
Object::connect: No such slot MainWindow::ShowAbout() in mainwindow.cpp:28
Object::connect: (sender name: 'actionAbout')
Object::connect: (receiver name: 'MainWindow')
於是將該connect連接信號和槽函數中的槽函數換成qt自帶的 close()函數,編譯成功進行操作對應的按鈕能正常觸發關閉,說明connect()函數沒問題,問題是出在槽函數這塊
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()));
出現這個問題一般從下面幾個思路進行定位分析:
1、信號和槽函數的類型是否一致,clicked()為void類型,自己寫的GenerateKey()也為void類型
2、信號和槽函數的參數類型是否一致,如果clicked(true)帶有參數,那么槽函數也必須要帶上參數,必須同為bool類型
3、信號和槽函數的名字是否有拼錯
4、槽函數是否有提前進行聲明,如果沒有聲明為slots類型的話,connect()也會被認為找不到槽函數
注:我上面遇到的問題就是未在頭文件中聲明 slots,所以就報錯了,添加了這個聲明之后,運行就正常了。
slots聲明如下:
public slots:
void GenerateKey();
void ShowAbout();