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