Qt基于ComboBox1更改ComboBox2

时间:2016-11-11 23:44:38

标签: c++ qt qt4

嗨我对Qt场景很新,我在根据comboBox1选择更新我的comboBox2时遇到问题。

每次我在comboBox1中进行更改时,我的应用程序崩溃,说访问冲突。它可能非常简单,但这是我的代码:在这种情况下,最初的comboBox1有“Car”和“Food”。每当我切换到“食物”时,我希望我的comboBox2填充项目“Egg”。

知道出了什么问题吗?

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");

}

1 个答案:

答案 0 :(得分:1)

你没有正确修复错字。我认为有三件事是错的,我认为第三件事会阻止编译。

首先,main.h表示你的班级名称是&#34; main&#34;,但是在main.cpp中,你的班级是WIPGui。显然,其中一个文件并不正确。我将继续假设您的实际main.h文件定义了WIPGui类,但看起来相同。

其次,正如迈克试图指出的那样,在你的跑步功能中,你有这个:

QComboBox *comboBox2 = new QComboBox();

在你的&#34;运行&#34;中创建一个局部变量方法;它没有分配给你的类成员变量comboBox2。你想要的是:

comboBox2 = new QComboBox();

第三,你的连接语句不应该根据我们看到的代码进行编译:

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

&#34; comboBox&#34;变量不存在于此代码中的任何位置。如果您实际使用了&#34; comboBox1&#34;在连接语句中,但这只是您在此处提供的代码中的另一个错字,然后连接语句就可以了。如果这是一个剪切和粘贴,那么我不知道这是如何编译的。

假设您已使用&#34; comboBox1&#34;在连接语句中,真正的问题是你永远不会分配给成员变量&#34; comboBox2&#34;当你的插槽试图使用它时,你会崩溃。