2017-05-09 173 views
2

我創建了一個類,其基類爲QObject,現在如果我嘗試在我的代碼中添加QTextBrowser,那麼調用QTextBrowser時出現沒有匹配函數的錯誤。我試圖通過添加QWidget類來編譯代碼,但仍然無法解決錯誤。我該如何解決這個問題。什麼是Qt中沒有匹配的函數調用錯誤

Here is the screenshot

主窗口代碼

#include <QApplication> 
#include "window.h" 
#include "bbbserver.h" 

int main(int argc, char **argv) 
{ 
QApplication app (argc, argv); 

bbbServer server; 
Window window; 

window.setStyleSheet("background-color: rgb(226, 226, 226);"); 
window.showFullScreen(); 

return app.exec(); 
} 

這裏是window.h中

#ifndef WINDOW_H 
#define WINDOW_H 

#include <QWidget> 

class QPushButton; 
class QTextBrowser; 
class QProcess; 
class QFile; 

class Window : public QWidget 
{ 
    Q_OBJECT 
public: 

    explicit Window(QWidget *parent = 0); 
    QTextBrowser *statusWindow; 


private slots: 

}; 


#endif // WINDOW_H 

這裏的代碼被用於window.cpp

#include "window.h" 
#include <QPushButton> 
#include <QProcess> 
#include <QTextBrowser> 
#include <QDebug> 

Window::Window(QWidget *parent) : QWidget(parent) 
{ 
    // Create and position the buttons on the main window 


    /*************** text browser *********************/ 
    statusWindow = new QTextBrowser(this); 
    statusWindow->setMinimumSize(QSize(0,0)); 
    statusWindow->setMaximumSize(QSize(10000,10000)); 
    statusWindow->setGeometry(175, 50, 440, 420); 
    statusWindow->setStyleSheet("background-color: rgb(236, 236, 236);"); 

代碼 下面是bbbserver.h文件

#ifndef BBBSERVER_H 
#define BBBSERVER_H 

#include <QObject> 
#include <QWidget> 
#include <QDebug> 
#include <QTcpServer> 
#include <QTcpSocket> 

class bbbServer : public QObject 
{ 
    Q_OBJECT 
public: 
    explicit bbbServer(QObject *parent = 0); 

signals: 

public slots: 
    void newConnection(); 

private: 
     QTcpServer *server; 
}; 

#endif // BBBSERVER_H 

這個代碼是bbbserver.cpp文件

#include "bbbserver.h" 

bbbServer::bbbServer(QObject *parent): 
    QObject(parent) 
{ 


    /*************************** SERVER *********************************/ 
    server = new QTcpServer(this); 
    connect(server, SIGNAL(newConnection()), this, SLOT(newConnection())); 

    if(!server->listen(QHostAddress::QHostAddress("192.168.0.1"), 5000)) 
    { 
     qDebug() << "SERVER NOT STARTED"; 
    } 
    else 
    { 
     qDebug() << "SERVER STARTED"; 
    } 
} 

void bbbServer::newConnection() 
{ 
    QTcpSocket *socket= server->nextPendingConnection(); 
    socket->write("Connection from 192.168.0.1 BBB\n"); 
    socket->flush(); 
    socket->waitForBytesWritten(30000); 

    socket->waitForReadyRead(30000); 
    qDebug() << socket->readAll(); 
`HERE I WANT TO ACCESS THE STATUS WINDOW(textbrowser statusWindow)` 
} 

這是完全錯誤,這是一樣的屏幕截圖。

bbbserver.cpp:8: error: no matching function for call to 'QTextBrowser::QTextBrowser(bbbServer* const)'

+1

請編輯您的問題,以包括代碼和完整的錯誤信息,而不是張貼屏幕截圖。 –

+0

@ G.M。你能再次檢查嗎 – user7345878

+0

是不是'這是錯誤的類型? – Badda

回答

0

傳遞給QTextBrowser constructor需要parent參數是QWidget *型的,而你傳遞一個QObject *。如果你真的需要bbbServerQTextBrowser的父對象,然後簡單地做......

infoSpace = new QTextBrowser; 
infoSpace->QObject::setParent(this); 

注:QObject::限定符必需的,因爲QWidget::setParent(QWidget *)有效地隱藏了它的基礎的QObject::setParent(QObject *)成員意味着後者不會參與正常的查找過程。

+0

沒有什麼區別,還是一樣的錯誤。 – user7345878

+0

編輯答案。不太清楚爲什麼在這種情況下需要'QObject ::'限定符。我會檢查文檔。 –

+0

這次得到了編譯,但是我怎樣才能將它顯示爲小部件。請參閱我有A.h的基類是QWidget和B.h,其基類是QObject。我想要一個將顯示在mainwindow上的小部件,並且我可以從B.cpp中訪問它。如果我在A.cpp中添加textbrowser,我無法從B.cpp – user7345878

相關問題