2016-11-11 125 views
1

嗨,我相當新的Qt場景,我無法更新我的comboBox2基於comboBox1選擇。Qt更改ComboBox2基於組合框1

每當我在comboBox1中進行更改時,我的應用程序崩潰,說訪問衝突。這可能是非常簡單的,但這裏是我的代碼:在這種情況下,最初的comboBox1有「Car」和「Food」。每當我切換到「食物」,我想我的comboBox2填充項目「雞蛋」。

任何想法出了什麼問題?

main.h

class main: 
{ 
    Q_OBJECT 


public: 
    main() {} 

    public slots : 

    private slots: 
     void onComboBoxIndexChanged(); 

private: 
    QComboBox* comboBox2; 
    void run(); 
}; 

的main.cpp

void main::run() 
{ 
QWidget *w = new QWidget(); 

QComboBox *comboBox1 = new QComboBox(); 
QComboBox *comboBox2 = new QComboBox(); 

comboBox1->addItem("Car"); 
comboBox1->addItem("Food"); 

connect(comboBox1, SIGNAL(currentIndexChanged(int)), this, SLOT(onComboBoxIndexChanged())); 
... 
} 


void main::onComboBoxIndexChanged() 
{ 
QComboBox* combo = dynamic_cast<QComboBox*>(sender()); 

if (combo == nullptr) 
{ 
    return; 
} 

comboBox2->addItem("Egg"); 

} 
+0

您似乎將'QComboBox'對象分配給'run'函數中的局部變量。最有可能的是,你打算把它分配給成員'comboBox2'。 – Mike

+0

嘿@Mike這是一個錯字。我實際上正在分配到comboBox2。你看到代碼有問題嗎? – Arbitel

回答

1

您沒有正確解決您的錯字。有三件事我看錯了,我會認爲第三件事會阻止編譯。

首先,main.h說你的類名是「main」,但在main.cpp中,你的類是WIPGui。顯然,其中一個文件不是正確的。我將繼續假設你的實際main.h文件定義了WIPGui類,但是看起來是一樣的。

其次,邁克試圖指出,運行中的功能,你有這樣的:

QComboBox *comboBox2 = new QComboBox(); 

這是建立在「運行」方法的局部變量;它不會分配給您的類成員變量comboBox2。你想要的是:

comboBox2 = new QComboBox(); 

三,你的連接語句應該不會編譯基於我們所看到的代碼:

connect(comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(onComboBoxIndexChanged())); 

的「組合框」變量任何地方都不會在這個代碼存在。如果你在connect語句中實際使用了「comboBox1」,但這只是你在這裏展示的代碼中的另一個錯字,那麼connect語句就沒有問題。如果這是一個剪切和粘貼,那麼我不明白這是如何編譯的。

假設你在connect語句中使用了「comboBox1」,那麼真正的問題是你永遠不會分配成員變量「comboBox2」,並且當你的插槽試圖使用它時,你會崩潰。

+0

謝謝!我在代碼中有更多的東西,我不得不簡化它,因此錯字。但第二點是訣竅:)邁克是對的。我對本地和類成員變量感到困惑! – Arbitel