2014-01-22 18 views
0

我有我的Qt的應用程序有問題,我用QMainWindow中,並嘗試建立2 QComboBox像我一樣,對於其他部件的目標在setupUi實施崩潰:QMainWindow的崩潰時使用QComboBox

是我的班主窗口,它的工作完美並顯示,直到我說了2組合框。

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

    public: 
     explicit MainWindow(QWidget *parent = 0); 
     MainWindow(Map *inMap, int dim1, int dim2); 
     ~MainWindow(); 

    public slots: 
     void boutonClicked(); 

    private: 
     Ui::MainWindow *_ui; 
     QPushButton *_bouton; 
     Canvas *_canvas; 
     QComboBox *_boxDim1; 
     QComboBox *_boxDim2; 
}; 

加入組合框後,程序崩潰到製造商的性能:

MainWindow::MainWindow(Map *inMap, int dim1, int dim2) 
{ 
    _ui->setupUi(this); 
    _boxDim1 = new QComboBox(); 
    _boxDim2 = new QComboBox(); 
    _canvas = new Canvas(inMap, dim1, dim2); 
    _bouton = new QPushButton("Test !"); 
    _bouton->setToolTip("Bouton a push"); 
    _bouton->setCursor(Qt::PointingHandCursor); 
    connect(_bouton, SIGNAL(clicked()), this, SLOT(boutonClicked())); 
    QWidget *q = new QWidget(); 
    setCentralWidget(q); 
    QGridLayout *mainLayout = new QGridLayout(); 
    mainLayout->addWidget(_canvas, 1, 0, 1, 1); 
    mainLayout->addWidget(_bouton, 2, 0, 1, 1); 
    q->setLayout(mainLayout); 
} 

在DDD調試之後,段錯誤的確切點是:

_ui->setupUi(this); 

而這個函數中:

void setupUi(QMainWindow *MainWindow) 
{ 
    if (MainWindow->objetName().isEmpty()) 
     MainWindow->setObjectName(QString::fromUtf8("MainWindow")); 
    MainWindow->resize(800, 600); 
    centralwidget = new QWidget(MainWindow) /// Segfault ici. 

我必須承認,我不掌握在哪裏呢,因爲增加的問題,對他們來說完全建立QPushButton和Canvas的。

回答

1

_ui您的變量沒有初始化,這就是爲什麼它崩潰。你需要的東西,如:_ui = new Ui::MainWindow(); ...也,這是很好的裝扮有MainWindowQObject帶一個參數作爲第二個構造父。或者只是使用第一個,並添加你需要的額外的參數。

+0

它的確沒有初始化_ui。令我驚訝的 是,它一直工作到有沒有這個初始化,很有可能是因爲項目沒有清洗。 – Woute