簡體   English   中英

從其他線程調用的QApplication方法setStyleSheet導致分段錯誤

[英]QApplication method setStyleSheet called from other thread causes segmentation fault

題:

分割錯誤可能是什么原因?

要么

如何更改背景圖片。

我寫:

static QApplication *_app;

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    _app = &app;
    ...
    app.setStyleSheet(ReadStyleSheet(STYLE_SHEET_WITH_BLUE_SCREEN));
    ...
}

// called with STYLE_SHEET_WITH_BLUE_SCREEN
void qtobeapp_setStyleSheet(int typeOfSheet)
{
    syslog(LOG_DEBUG, "main: qtobeapp_setStyleSheet typeOfSheet[%d] _app[%p] 5", typeOfSheet, _app);
    _app->setStyleSheet( ReadStyleSheet(typeOfSheet) );
    syslog(LOG_DEBUG, "main: qtobeapp_setStyleSheet typeOfSheet[%d] _app[%p] 5", typeOfSheet, _app);
}

當我調用qtobeapp_setStyleSheet(STYLE_SHEET_WITH_BLUE_SCREEN); 來自不同的線程

我會得到:

Jun  2 17:37:30 Viper user.debug QT_OBEAPP: main: qtobeapp_setStyleSheet typeOfSheet[1] _app[0xbffceab4] 5
Jun  2 17:37:30 Viper user.debug QT_OBEAPP: signal_handler: SIGNAL [11] caught. Sending PID: 0, UID: 11
Jun  2 17:37:30 Viper user.debug QT_OBEAPP: main: qtobeapp_setStyleSheet typeOfSheet[1] _app[0xbffceab4] 5
Jun  2 17:37:32 Viper user.err QT_OBEAPP: signal_handler: SIGNAL [11] caught. Stack trace size: 24
Jun  2 17:37:32 Viper user.err QT_OBEAPP: /afc/obe/QT_OBEAPP [0x1002697c]
Jun  2 17:37:32 Viper user.err QT_OBEAPP: [0x100374]
Jun  2 17:37:32 Viper user.err QT_OBEAPP: /lib/libQtGui.so.4 [0xea97498]
Jun  2 17:37:32 Viper user.err QT_OBEAPP: /lib/libQtGui.so.4 [0xea99060]
Jun  2 17:37:32 Viper user.err QT_OBEAPP: /lib/libQtGui.so.4 [0xea9d6a0]
Jun  2 17:37:32 Viper user.err QT_OBEAPP: /lib/libQtGui.so.4(_ZNK14QWidgetPrivate15paintBackgroundEP8QPainterRK7QRegioni+0x1a0) [0xe711808]
Jun  2 17:37:32 Viper user.err QT_OBEAPP: /lib/libQtGui.so.4(_ZN14QWidgetPrivate10drawWidgetEP12QPaintDeviceRK7QRegionRK6QPointiP8QPainterP19QWidgetBackingStore+0x3f0) [0xe71bb0c]
Jun  2 17:37:32 Viper user.err QT_OBEAPP: /lib/libQtGui.so.4 [0xe902a48]
Jun  2 17:37:32 Viper user.err QT_OBEAPP: /lib/libQtGui.so.4(_ZN14QWidgetPrivate16syncBackingStoreEv+0xa8) [0xe70c100]
Jun  2 17:37:32 Viper user.err QT_OBEAPP: /lib/libQtGui.so.4(_ZN7QWidget5eventEP6QEvent+0x7f4) [0xe71d7d4]
Jun  2 17:37:32 Viper user.err QT_OBEAPP: /lib/libQtGui.so.4(_ZN11QMainWindow5eventEP6QEvent+0x100) [0xeb78028]
Jun  2 17:37:32 Viper user.err QT_OBEAPP: /lib/libQtGui.so.4(_ZN19QApplicationPrivate13notify_helperEP7QObjectP6QEvent+0xe4) [0xe6b8578]
Jun  2 17:37:32 Viper user.err QT_OBEAPP: /lib/libQtGui.so.4(_ZN12QApplication6notifyEP7QObjectP6QEvent+0x26c) [0xe6bf8cc]
Jun  2 17:37:32 Viper user.err QT_OBEAPP: /lib/libQtCore.so.4(_ZN16QCoreApplication14notifyInternalEP7QObjectP6QEvent+0xa8) [0xe20f4c8]
Jun  2 17:37:32 Viper user.err QT_OBEAPP: /lib/libQtCore.so.4(_ZN23QCoreApplicationPrivate16sendPostedEventsEP7QObjectiP11QThreadData+0x348) [0xe210ab0]
Jun  2 17:37:32 Viper user.err QT_OBEAPP: /lib/libQtCore.so.4(_ZN16QCoreApplication16sendPostedEventsEP7QObjecti+0x34) [0xe210c7c]
Jun  2 17:37:32 Viper user.err QT_OBEAPP: /lib/libQtGui.so.4 [0xe74c74c]
Jun  2 17:37:32 Viper user.err QT_OBEAPP: /lib/libQtCore.so.4(_ZN10QEventLoop13processEventsE6QFlagsINS_17ProcessEventsFlagEE+0x60) [0xe20e34c]
Jun  2 17:37:32 Viper user.err QT_OBEAPP: /lib/libQtCore.so.4(_ZN10QEventLoop4execE6QFlagsINS_17ProcessEventsFlagEE+0xdc) [0xe20e568]
Jun  2 17:37:32 Viper user.err QT_OBEAPP: /lib/libQtCore.so.4(_ZN16QCoreApplication4execEv+0xe4) [0xe210d80]
Jun  2 17:37:32 Viper user.err QT_OBEAPP: /lib/libQtGui.so.4(_ZN12QApplication4execEv+0x30) [0xe6b7924]
Jun  2 17:37:32 Viper user.err QT_OBEAPP: /afc/obe/QT_OBEAPP(main+0x380) [0x100267a8]
Jun  2 17:37:32 Viper user.err QT_OBEAPP: /lib/libc.so.6 [0xdf076a0]
Jun  2 17:37:32 Viper user.err QT_OBEAPP: /lib/libc.so.6 [0xdf07824]

沒有調用qtobeapp_setStyleSheet(STYLE_SHEET_WITH_BLUE_SCREEN);,一切正常。

分割錯誤可能是什么原因?

要么

如何更改背景圖片。

謝謝

謝謝你們,

我使用QMetaObject :: invokeMethod來調用QApplication :: setStylesheet,並且它起作用了。

確實,我通過QMetaObject :: invokeMethod調用了qtobeapp_setStyleSheet(int typeOfSheet)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM