qt5.12下繼承於Qdialog的類調用slot函數編譯錯誤匯總

2020-12-25 程式設計師小白學開發

最近由於項目需要,需要使用qt做一套連接資料庫並且實現用戶登錄,註冊的界面,但是做起來卻很費勁,出現了一堆奇怪的編譯錯誤。

1 其他機器上編譯通過,換個機器編譯失敗

很多時候,我們發現代碼的語法是正確的,而在這個機器上編譯也是通過的,但是換一臺機器後,我們發現,編譯竟然沒有通過,這個原因是未知的。

然後會報出來一堆很基礎的錯誤,如mainwindow類不識別了,qstring類找不到了,即使你有頭文件,但是還是報很多的錯誤。

如果是這個錯誤,建議你先使用這個方法:使用vs調試器打開你的代碼,在文件中,找到高級保存選項,將代碼保存為代籤名的,然後保存。

這個時候,在qt下先執行qmake,然後再重新構建,最後看一下是否還有錯誤。如果還是一堆堆的錯誤,那麼繼續把報錯的h文件和cpp文件,採用相同的保存方式。

經過修改,這個是可以達到解決編譯錯誤的修改的。但是如果代碼本身的格式就是代籤名的,還是出錯的話,我們只能在這個機器上重新新建工程,複製粘貼進行實現了。

但是這個情況很少見,除非像我這樣的,公司電腦都是加密的,沒有辦法,如果有代碼拷貝過來,那就一定要重新敲一下了。

2 奇怪的錯誤2詳細展示和解決方法

:-1: error: cannot open output file debug\DemoD.exe: Permission denied

collect2.exe:-1: error: error: ld returned 1 exit status

這個問題的原因就是你在上次調試的時候,exe沒有正確退出,然後導致最後的這個啟動無法啟動,那我們就需要將相關的編譯器關閉,重新打開pro文件即可。

或者ctrl+alt+delete進行後臺任務器的查看,進行相關的程序的關閉即可進行第二次調試和編譯。這個也是我在加密的機器上調試qt中比較尷尬多次遇到的問題。

3 奇怪錯誤3:slot函數有定義但是無法響應

slot函數定義了,但是每次調用都提示無法響應。

具體編譯錯誤如下:QObject::connect: No such slot QDialog::enter_log() in ..\DemoD\enter.cpp:54

首先我們要轉到slot函數看看是否有具體的實現定義,如果有的話還出錯,建議先把這個槽函數取消掉,換個其他的槽函數調用試一下,如果沒有問題的話,可能是自己的槽函數和系統自帶的有衝突吧。這個具體情況具體分析吧。目前我只發現這幾種解決方案了。slot函數無響應不會具體報錯,但是一旦出現這樣的警告,就是一個空槽函數了。

大家在使用slot函數的時候,千萬要注意這個情況,以免出現不必要的bug,穩固基礎知識再去寫程序。

相關焦點

  • Qt信號槽原理
    如果錯誤還請大家指正。通過繼承QObject,並在定義類是添加一定Qt內置宏,能在運行時動態獲取Qt的信號槽、類型信息以及相關屬性。答案是使用moc預編譯3.2、moc編譯moc全稱Meta-Object Compiler,即元對象編譯器。我們可以在Qt的安裝目錄的bin文件下看到moc工具,moc.exe。Qt的構建的時候,會調用該工具生成moc文件,我們在編譯目錄下看到的moc_xxx.cpp文件就是該工具生成的。
  • Qt的信號是私有還是公有
    ❝Qt 4版本(4.8.7)下是「保護」(protected),Qt 5版本(5.12.1)下是
  • Qt 國際化(下)
    5 messages savedtr()函數是 QObject 的函數,如果你的類不是繼承自 QObject,就不能直接使用 tr()函數。比如我們在 main()函數中希望增加一句設置 MainWindow 的 title 的代碼:w.setWindowTitle(tr("MyApp"));直接這樣寫是無法通過編譯的,因為 main()函數是全局函數,所以這個 tr()是找不到的。
  • QT攝像頭調用(為OpenCV人臉識別做鋪墊)--- Qt(五)
    然而,大多數工作都是在調用setCamera()函數時完成的,並傳入QByteArray。【看來qt/VS也是設置『0』,才啟用。調用setCamera完成相關設置,這點和串口setpost一樣】問題來了?一個漢字多少字節?
  • 在Qt中將函數發送到主線程執行
    考慮這樣一種需求,使用Qt的線程類QThread在後臺執行操作(比如說拷貝文件)的時候發生了錯誤,產生了一個錯誤信息需要提醒給用戶,在後臺輸出很顯然是不夠的
  • Qt 國際化(上)
    Qt 中的國際化的方法有很多,常用的有使用 QTextCodec 類和使用 tr()函數。前者將編碼名稱寫到代碼裡面,除非你使用 Unicode 編碼,否則國際化依然是一個問題;後者就不會有這個問題,並且這也是 Qt 推薦的做法。因此,我們主要來說使用 tr()函數的方法進行應用程式的國際化。我們先來看一個很簡單的 MainWindow。
  • C++11新特性(80)-繼承的構造函數與多重繼承
    對於繼承的構造函數,C++11通過一個簡單的using語句,使得繼承一個類時可以省去一些麻煩。具體可以參照下面的文章。C++11新特性(59)-繼承的構造函數https://mp.weixin.qq.com/s/BGUa7-RSCtFRnBYjUVFFDA
  • 如何繼承 Date 對象?由一道題徹底弄懂 JS 繼承
    由此可見,ES6繼承的內部實現和Babel打包編譯出來的實現是有區別的。(雖說Babel的polyfill一般會按照定義的規範去實現的,但也不要過度迷信)。幾種繼承的細微區別雖然上述提到的三種方法都可以達到繼承 Date的目的-混合法嚴格說不能算繼承,只不過是另類實現。
  • python--調用函數
    計算機編譯或運行時,使用某個函數來完成相關命令。對無參函數調用時則無實際參數表。
  • keil編譯中所有編譯的錯誤信息
    5.Call of non-function in function main 調用未經過定義的函數.  6.cannot modify a const object in function main 對常量不能進行修改.
  • QT 技術應用常用問題解答
    /qt_zh_CN.ts然 後,我們就用Linguist打開這個qt_zh_CN.ts,進行翻譯了,翻譯完成後,保存後,再用lrelease命令生成qt_zh_CN.qm, 這樣,我們把它加入到我們的qt project中,那些系統的對話框,菜單等等其它的默認是英文的東西就能顯示成中文了。9、在Windows下Qt裡為什麼沒有終端輸出?
  • Qt5.12.2+Opencv4.2配置動態連結庫以用Qt調用Opencv進行創作
    creator安裝(1)Qt安裝本教程針對之前下載的Qt 5.12.2進行安裝演示l 點擊下載好的qt-opensource-windows-x86-5.12.2.exe,出現如下頁面,點擊Next和WITH_QT選中,然後再次點擊Configurel 此時仍會有紅色出現,如下圖所示,l 將紅色區域中的Value地址路徑改為你的Qt安裝路徑下對應的Qt5Concurrent、Qt5Core
  • Linux下編譯時出現的錯誤及解決方法
    Linux下編譯時出現的錯誤及解決方法 (1)由於是Linux新手,所以現在才開始接觸線程編程,照著GUN/Linux編程指南中的一個例子輸入編譯,結果出現如下錯誤......
  • slot vue 用法專題及常見問題 - CSDN
    也可以將函數傳遞到作用域槽。許多庫使用它來提供可重用的函數組件。v-slot 的別名是#。因此,可以用#header="data" 來代替 v-slot:header="data"。還可以使用 #header來代替 v-slot:header(前提:不是作用域插槽時)。對於默認插槽,在使用別名時需要指定默認名稱。
  • QT高級編程技巧(一)-- 編寫高效的signal & slot通信代碼
    先回顧下利用signal & slot機制實現控制項消息處理的方法。控制項消息處理假設我們的主界面上有一個使用ui->btn指向的QPushButton對象,要實現該對象的clicked消息處理,可以在主界面對象MainWindow上添加一個slot方法onBtnClicked,並在其構造函數中使用connect方法與ui->btn的clicked消息進行綁定,如下:MainWindow
  • keil-c常見編譯錯誤
    2、語法及語義錯誤:語法和語義錯誤都發生在原文件中。有這類錯誤時,給出提示但不產生目標文件,錯誤超過一定數量才終止編譯。3、警告:警告出現並不影響目標文件的產生,但執行時有可能發生問題。程式設計師應斟酌處理。
  • 你不知道的21個Qt隱藏功能和技巧
    Q_GADGET:不需要從QObject繼承就可以使用Qt的MetaObject功能2.  Q_ENUMS:對枚舉對象進行反射(reflection)3.  Q_SIGNAL:不需要signals關鍵字就可以將一個函數指定為singal函數4.  Q_SLOT:不需要slots關鍵字就可以將一個函數指定為slot函數5.
  • 學習qt07QtCreator技巧
    快捷鍵和使用技巧快捷鍵解釋F4切換同名的頭和源文件F2跟蹤光標下符號,或函數體/頭切換Shift+F2切換函數聲明和定義Ctrl+Shift
  • (5)嵌入式QT多線程的簡單實現(方法一)
    的規則需要記住:繼承QThread類,創建線程對象後,只有run()方法運行在新的線程裡,類對象裡面的其他方法都在創建QThread類的線程裡運行。        簡單地舉一個例子:        如果在QT界面的ui線程裡,使用繼承了QThread的類去定義一個對象qthread,並且重載了run()函數,這個類還有其他函數。
  • 每天都在調用函數,Go 中函數調用的原理你知道嗎?
    函數是 Go 語言中的一等公民,理解和掌握函數的調用過程是深入學習 Golang 時無法跳過的步驟,這裡會介紹 Go 語言中函數調用的過程和實現原理並與 C 語言中函數執行的過程進行對比,同時對參數傳遞的原理進行剖析,讓讀者能夠清楚地知道 Go 在函數的執行過程中究竟都做了哪些工作。