由于最近開發(fā)需要在VS2017上配置QT開發(fā)環(huán)境,進(jìn)行QT項(xiàng)目的開發(fā),之前從來沒有這樣使用過,在此記一些坑。
1、QT Creator按鈕槽函數(shù)
QT的槽函數(shù)是非常方便的,使用QT Creator可以自動(dòng)生成代碼,方便快捷。但是代碼可讀性不強(qiáng),一些連接方面的信息都被隱藏了。由于之前一直使用QT Creator,所以其實(shí)還是挺喜歡這種方式的。具體操作是在控件界面拖動(dòng)一個(gè)按鈕放在設(shè)計(jì)界面。
這時(shí)我們用鼠標(biāo)右鍵PushButton按鈕,會(huì)有一個(gè)轉(zhuǎn)到槽的選擇。點(diǎn)擊之后在代碼頁會(huì)自動(dòng)生成相應(yīng)的代碼,我們只需要在該按鈕的槽函數(shù)中添加響應(yīng)事件。
但是! 在VS中打開界面,再右鍵按鈕時(shí)沒有轉(zhuǎn)到槽這個(gè)選項(xiàng),這就需要我們自己手寫槽函數(shù)與連接。
2、VS中添加按鈕槽函數(shù)
其實(shí)手寫槽函數(shù)跟在QT Creator中差不多,只不過多了一個(gè)連接的過程。
第一步,跟在QT Creator中一樣,添加槽函數(shù)。
//.h文件
//添加槽函數(shù)聲明
private slots:
void pushbutton_slots();
//.cpp文件
//添加槽函數(shù)定義
void QtFileTest_1::pushbutton_slots()
{
// 添加需要的操作
}
第二步就是最重要的連接部分,在QT中常使用connect來綁定信號(hào)槽,也是最容易出錯(cuò)的地方。
首先是一種比較老的方式:
//.cpp文件
connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(pushbutton_slots));
這種方式在VS中,在點(diǎn)擊按鈕之后并不能觸發(fā)槽函數(shù),醉了醉了!
第二種,在QT5中換了一種方式:
//.cpp文件
connect(ui.pushButton, &QPushButton::clicked, this, &QtFileTest_1::pushbutton_slots);
這中方式可以比較清晰的看出槽函數(shù)在哪個(gè)類中,在VS中也能正常使用。
但是!千萬不要兩種方式混合使用
3、踩坑
當(dāng)你兩種方式混合使用的時(shí)候,是會(huì)報(bào)錯(cuò)的!
“Signal and slot arguments are not compatible”文章來源:http://www.zghlxwxcb.cn/news/detail-412025.html
還有看到一些博客,在使用帶參數(shù)的信號(hào)槽函數(shù)時(shí),還是用舊的方式,但是好像VS中不能使用,以后需要使用再說吧。具體關(guān)于信號(hào)槽的使用可以去看相關(guān)博客。文章來源地址http://www.zghlxwxcb.cn/news/detail-412025.html
到了這里,關(guān)于VS開發(fā)QT項(xiàng)目,手寫按鈕槽函數(shù)避坑的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!