1. 程式人生 > >Qt程式設計之訊號與槽-------unresolved external symbol "public: virtual struct QMetaObject const * __thiscall XX::metaObject(void)const

Qt程式設計之訊號與槽-------unresolved external symbol "public: virtual struct QMetaObject const * __thiscall XX::metaObject(void)const

原因是加入Q_OBJECT這個macro的類,被編譯的時候就要用到moc這個命令,所以在VS2010中,沒有加入此命令的應用,當然會出錯了。所以解決辦法是加,或者如果你不使用訊號槽可以直接刪除。

當要在GUI中用到訊號與槽,就需在.h檔案中的類裡寫入Q_OBJECT巨集。而任何含有Q_Object的類都必須使用Qt的moc工具生成對應的cpp檔案,然後在專案裡面包含這個cpp,編譯才能成功,否則會出錯連結錯誤,moc yourfilename.h -o moc_youfilename.cpp,這是moc命令列的使用。

Qt自動生成moc檔案:

命令列生成moc檔案的方式:

cd C:/Qt/4.7.1/bin

moc  .h檔案群路徑 -o 要生成的moc檔案的全路徑;

例如:

VS中不是用addin建立的專案,自動生成moc檔案的設定:

在VS的解決方案管理器裡面,右鍵需要生成moc檔案的標頭檔案-開啟屬性視窗;

常規-項型別,選擇自定義生成工具;

關閉屬性視窗重新開啟,就出現了自定義生成工具選項;

自定義生成工具-常規:

命令列:"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"

輸出:.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp

 將輸出視為內容:是

 連結物件:是

如果編譯還有問題,在解決方案資源管理器裡阿敏,右鍵生成的moc檔案開啟屬性視窗;

配置屬性-常規:設定下在debug和release下面分別設定下是否在專案中排除的屬性;

references:

http://blog.csdn.net/zxgis/article/details/8243493

http://liangbing8612.blog.51cto.com/2633208/596269

http://www.cnblogs.com/liuyunfeifei/archive/2013/05/01/3052856.html

http://blog.csdn.net/hackbuteer1/article/details/6573317

http://stackoverflow.com/questions/7272040/q-object-problem-in-visual-c

http://blog.sina.com.cn/s/blog_687960370101dd79.html

http://stackoverflow.com/questions/14170770/unresolved-external-symbol-public-virtual-struct-qmetaobject-const-thiscal

http://blog.csdn.net/xiaofengkuang/article/details/9999147

一個搜尋時候搜尋到的關於用VS2010重新編譯Qt的附屬產物:

http://stackoverflow.com/questions/5601950/how-to-build-qt-for-visual-studio-2010

相關推薦

Qt程式設計訊號-------unresolved external symbol "public: virtual struct QMetaObject const * __thiscall XX::metaObject(void)const

原因是加入Q_OBJECT這個macro的類,被編譯的時候就要用到moc這個命令,所以在VS2010中,沒有加入此命令的應用,當然會出錯了。所以解決辦法是加,或者如果你不使用訊號槽可以直接刪除。 當要在GUI中用到訊號與槽,就需在.h檔案中的類裡寫入Q_OBJECT巨集。而任何含有Q_Object的類都

QT遇到unresolved external symbol "public: virtual struct QMetaObject解決方案

出現這個錯誤的原因是沒有為標頭檔案生產moc檔案,在類定義包含Q_OBJECT巨集都是必需有這個moc檔案的。 右擊該標頭檔案,屬性,General的Item Type選擇Custom Build Tool,確定。再重新進入General介面,點選Custom

Qt Quick 事件處理訊號

    前面兩篇文章《QML 語言基礎》和《Qt Quick 簡單教程》中我們介紹了 QML 語言的基本語法和 Qt Quick 的常見元素,親們,通過這兩篇文章,您應該已經可以完成簡單的 Qt Quick 應用了。接下來呢,哈,我們要介紹 Qt Quick 中一個灰常灰常重

Qt核心機制原理訊號

訊號與槽 訊號和槽機制是Qt的核心機制之一,要掌握Qt程式設計就需要對訊號和槽有所瞭解。訊號和槽是一種高階介面,它們被應用於物件之間的通訊,它們是Qt的核心特性,也是Qt不同於其它同類工具包的重要地方之一。 在我們所瞭解的其它GUI工具包中,視窗小部件

Qt 筆記:訊號的連線方式

深入訊號與槽的連線方式 -Qt::DirectConnection(立即呼叫) -Qt::QueuedConnection(非同步呼叫) -Qt::BlockingQueuedConnection(同步呼叫) -Qt::AutoConnection(預設連線) -Q

Qt-登入介面訊號函式

Qt訊號與槽函式可以實現任意兩個Qt類的物件之間進行通訊,比如登入類QtLoginWin 與介面上的登入按鈕loginBt 當點選按鈕的時候會發送clicked訊號,這樣就可以與QtLoginWin的槽函式關聯進行通訊如下圖: 把控制元件的名字分別修改為 使用者

PyQt訊號訊號的高階用法(四)

裝飾器訊號與槽 所謂裝飾器訊號與槽,就是通過裝飾器的方法來定義訊號與槽函式,具體的使用方法如下 @PyQt5.QtCore.pyqtSlot(引數) def on_傳送者物件名稱)發射訊號名稱(self,引數): pass 這種方法有效的前提是

PyQt訊號訊號的高階玩法(三)

高階自定義訊號與槽 所謂高階自定義訊號與槽,指的就是我們可以以自己喜歡的方式定義訊號與槽函式,並傳遞引數,自定義訊號的一般流程如下 定義訊號 定義槽函式 連線訊號與槽函式 發射訊號 1 定義訊號 通過類成員變數定義訊號物件 #無引數

PyQt訊號訊號的入門應用(一)

前言 訊號與槽有三種使用方法 第一種:內建訊號與槽的使用 第二種:自定義訊號與槽的使用 第三種:裝飾器的訊號與槽的使用 一: 內建訊號與槽的使用 內建訊號與槽的使用,是指在發射訊號時,使用視窗控制元件的函式,而不是自定義的函式,這種也是我們前

Qt 自定義訊號

注 物件與槽理解 //第一個引數lineEdit是激發事件物件,訊號中的方法必須在物件中存在,並在物件類標頭檔案signals下定義, //第二個引數訊號, //第三個引數this是槽方法所屬類的物件,且必須在物件類的標頭檔案的slots下定義

Qt 中的訊號,連線日誌庫QsLog,在介面上顯示出日誌資訊

新建一個基於QWidget的工程,在介面上新增一個QTextBrowser控制元件,用來在介面顯示日誌資訊。 在pro檔案中新增QsLog的標頭檔案和lib庫 INCLUDEPATH += include/QsLog.h \ inc

VS2015 + QT 編譯出現public: virtual struct QMetaObject const * __thiscall 錯誤

VS2015 編譯QT專案出現錯誤: 嚴重性    程式碼    說明    專案    檔案    行    禁止顯示狀態 錯誤    LNK2001    無法解析的外部符號 "public: virtual struct QMetaObject const * __t

QT---訊號的關聯語法

一概述  二訊號  四訊號和槽的關聯  五元物件工具  六程式樣例  七應注意的問題  8訊號和槽也不能攜帶模板類引數  9巢狀的類不能位於訊號或槽區域內也不能有訊號或槽 

QT學習路---訊號問題解析

前兩天用到了QT的訊號與槽這個機制,剛開始發射訊號的時候,我是這麼寫的語句 connect(sender,SINGAL(),receiver,SLOT()) 由於我用的是QT 5.11這個本,從網上查到的例子來說,大部分都是以上那個形式,也沒有問題,而實際上在QT5.11版本上,向下面這樣寫

Qt學習路_3(VS下Qt訊號初次體驗)

在Qt中是使用訊號與槽的機制來完成事件的響應過程的。網上Qt的開發基於Qt Creator的資料比較多,基於vs下的資料除了其環境配置方面的外就剩下很少了。開始以為2者環境下的開發方式相同,後面稍微接觸了下發現還是有微妙的區別的,Qt在vs下畢竟是add-in嵌入的,用起

QT學習day02---圖形介面、對話方塊、訊號

一、QT圖形介面 ①QT座標軸 起點:左上角 X:橫軸 Y:縱軸 ②QWidget、QDialog、QMainWindow的異同點 QWidget:視窗為空,什麼內容都沒有 QMainWindow:含有選單欄,狀態列,工具欄等…已經包含了QWidget QDialog:對話方塊(

QT多執行緒中,物件訊號連線不上的解決辦法

1、在接收者建立執行緒中,把接收者移動到主執行緒中: pReceiverObj->moveToThread(QApplication::instance()->thread()); 2、這樣傳送訊號的時候,就會在主執行緒事件佇列處理中來處理了。 把connect的最

QT學習記錄1(訊號

使用,學習QT的背景 剛入職新公司,工作是嵌入式軟體,工作內容包括使用QT進行一些軟體的開發等,以前沒有接觸過QT,特意建立第一篇部落格,用作QT的學習過程記錄 入職後,公司前輩要求使用QT寫一個軟體,接收硬體裝置傳回的資料並顯示,同時軟體可以對裝置的工作方式進行設定,使用TCP通訊協議。

QT使用訊號注意事項

QT使用訊號與槽注意事項 如需轉載請標明出處:http://blog.csdn.net/itas109 QQ技術交流群:129518033 目錄 文章目錄 QT使用訊號與槽注意事項 @[toc] 前言

PyQt GUI程式設計——訊號

PyQt中使用訊號與槽的機制實現物件之間的通訊。 訊號 當物件改變其狀態時,訊號就由該物件發射出去,並且物件只負責傳送訊號,它不知道另一端是誰在接收這個訊號。這樣就做到了真正的資訊封裝,能確保物件被當作一個真正的軟體元件來使用。 槽 用於接收訊號,並且槽只是普通的物件成員函式。一個槽