2
我設置了一個主窗口QP_Qt
與標籤上它命名爲serverStatusLabel
:編譯過程中出現的Qt - 用戶界面訪問衝突與Visual Studio 2010
class NP_Qt : public QMainWindow
{
Q_OBJECT
public:
NP_Qt(QWidget *parent = 0, Qt::WFlags flags = 0);
~NP_Qt();
void setServerStatusLabel(QString status);
void setClientStatusLabel(QString status);
private:
Ui::NP_QtClass ui;
}
void NP_Qt::setServerStatusLabel(QString status)
{
ui.TCPServerStatusLabel->setText(status);
}
沒有錯誤。 在運行時,當setServerStatusLabel
從另一個類叫做:
void ServerListenThread::run()
{
if(! tcpServer.listen(QHostAddress::LocalHost, portNumber)) {
window->setServerStatusLabel("Failed to listen on this port");
} else {
window->setServerStatusLabel("Listening");
}
}
發生錯誤:
Unhandled exception at 0x771115de of SP_Qt.exe: 0xC0000005 : access violation at 0xccccce2c
什麼可能導致這個錯誤?
它工作正常!我是Qt新手,所以我不熟悉Signal/Slot系統。您能否告訴我爲什麼Signal/Slot系統更喜歡直接調用函數? – CDT
那麼,我會建議你閱讀[this](http://qt-project.org/doc/qt-4.8/signalsandslots.html)文章:它解釋了很多。簡而言之:無法實現獨立線程之間的連接,而無需特殊的線程安全機制。 Qt信號/插槽表示這種機制。你也可以使用['QMetaObject :: invokeMethod'](http://stackoverflow.com/questions/1144240/qt-how-to-call-slot-from-custom-c-code-running-in-a-different線程),但它更難。 – ahawkthomas
真的很感激! – CDT