2013-07-01 52 views
0

我已經宣佈在mainwindow.hQT C++內部變量切換

public: 
    explicit MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 
    int port(); 

一個int功能此外我聲明在從屬mainwindow.cpp文件此功能。

int MainWindow::port() 
{ 
    int port_int; 
    QString port_ei; 

    if(ui->portInput->text() == 0) 
    { 
     port_ei = "6008"; 
     ui->textIncome->setPlainText(port_ei); 
     port_int = port_ei.toInt(); 
    } 
    else 
    { 
     port_ei = ui->portInput->text(); 
     ui->textIncome->setPlainText(port_ei); 
     port_int = port_ei.toInt(); 
    } 

    return port_int; 
} 

現在我想要我的服務器(在myserver.cpp文件中)來監聽那個端口。

MyServer::MyServer(QObject *parent) : 
    QObject(parent) 
{ 
    server = new QTcpServer(this); 
    connect(server,SIGNAL(newConnection()),this,SLOT(newConnection())); 

    int port_out = MainWindow::port(); 

    if(!server->listen(QHostAddress::Any,port_out)) 
    { 

     qDebug() << "Server could not start."; 

    } 
    else 
    { 
     qDebug() << "Server started."; 
    } 
} 

但QT告訴我,我犯了一個不是靜態的功能(在int port_out = MainWindow::port();線)的非法請求。 如何解決?有沒有更好的方法來做到這一點,如果你有兩個獨立的.cpp和.h文件(除了main.cpp)。 是的,我在兩個cpp文件中都包含了「mainwindow.h」和「myserver.h」。

回答

1

MainWindow::port();是一個靜態函數調用。但是port函數不是靜態的,它需要被調用,如main_window->port(),其中main_window是指向MainWindow對象的指針。

+0

我該如何創建一個main_window指向MainWindow的指針? * main_window = MainWindow? – beary

+0

@ beary:不。退一步。 **哪個** MainWindow?如果你的應用只有一個,[使用適當的qApp功能](http://stackoverflow.com/a/5921594/15416) – MSalters

+0

@ beary:這是非常普遍的問題。你根本不熟悉C++嗎?也許你應該閱讀一些書籍教程。通常在Qt中,主窗口類的對象是在'main()'函數中創建的。在主窗口構造函數和類成員函數中,您有一個指向'MainWindow'的指針,可以使用'this'關鍵字引用它。例如,您可以將此指針傳遞給'MyServer'構造函數。 –