2013-06-01 43 views
0

我在Qt中有QPixmap的一個很奇怪的問題。 我使用C++編碼。 無論如何,問題是,只要我想在我的主窗口類中創建第9個QPixmap指針,程序就會崩潰。 所以此工程:Qt QPixmap指針限制

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 
    QPixmap *doorOpened, *doorClosed, *dirUp, *dirDown, *dirNone, *timePause, *timePlay, *timeStop; 
    //QPixmap *doorOpen; 
public: 
    explicit MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 
private: 
    Ui::MainWindow *ui; 
}; 

這種崩潰:

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 
    QPixmap *doorOpened, *doorClosed, *dirUp, *dirDown, *dirNone, *timePause, *timePlay, *timeStop; 
    QPixmap *doorOpen; 
public: 
    explicit MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 
private: 
    Ui::MainWindow *ui; 
}; 

這東西是部分地與Qt創建者和櫥窗設計師完成的,因爲你可以通過代碼已經猜到了。

那麼我在這裏做錯了什麼導致這種奇怪的行爲?

在此先感謝!

+1

它如何崩潰?你在stderr中有錯誤嗎?隨意分享:) – bartimar

+0

@bartimar它只是segfaults。無論如何,我通過在QPixmap相關的所有東西之後實例化QTimer來解決這個問題。雖然奇怪。 –

+0

作爲[「隱式共享類」](http://qt-project.org/doc/qt-4.8/implicit-sharing.html#implicit-data-sharing)'QPixmap'已經是一種智能指針,所以它不應該與指針一起使用。 – alexisdm

回答

1

在初始化或訪問它們之前,嘗試在構造函數中初始化所有指針爲零。

另外QPixmap有一個功能isNull()。這可以用於檢查與他們的錯誤。

此外,如果您使用默認的構造函數(doorOpen = new QPixmap();)的像素圖,然後調用load()與您要使用的文件名,你可以檢查load()返回值進行錯誤檢查。

http://qt-project.org/doc/qt-4.8/qpixmap.html#isNull

http://qt-project.org/doc/qt-4.8/qpixmap.html#load

希望有所幫助。

+0

感謝您的快速回復,但問題是即使我不使用它也會崩潰。只是指針變量的存在會導致崩潰。 –

+0

你使用其他指針嗎?你所做的一切就是讓程序崩潰。正如bartimar已經問過的那樣,該程序如何崩潰以及在哪裏?你已經在調試器中運行了程序,不是嗎? – 2013-06-01 19:23:23

+0

哦,我發現了這個問題。無論出於何種原因,我必須在我所有的QPixmap相關後實例化我在Mainwindow的構造函數中使用的QTimer。我不知道爲什麼,但現在它工作。 –