Qt在ComboBox1的基础上改变ComboBox2

Qt Change ComboBox2 based on ComboBox1

您好,我是 Qt 场景的新手,我无法根据 comboBox1 选择更新我的 comboBox2。

每次我在 comboBox1 中进行更改时,我的应用程序都会崩溃,提示访问冲突。这可能非常简单,但这是我的代码:在这种情况下,初始 comboBox1 具有 "Car" 和 "Food"。每当我切换到 "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");

}

您没有正确更正错字。我看到了三处错误,我认为第三个会阻止编译。

首先,main.h说你的class名字是"main",但在main.cpp中,你的class是WIPGui。显然其中一个文件不是正确的。我将继续假设您的实际 main.h 文件定义了 WIPGui class,但其他方面看起来相同。

其次,正如 Mike 试图指出的那样,在您的 运行 函数中,您有:

QComboBox *comboBox2 = new QComboBox();

那是在您的 "run" 方法中创建一个局部变量;它没有分配给您的 class 成员变量 comboBox2。你想要的是:

comboBox2 = new QComboBox();

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

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

"comboBox" 变量在此代码中不存在。如果您实际上在 connect 语句中使用了 "comboBox1" ,但这只是您在此处提供的代码中的另一个拼写错误,那么 connect 语句没有问题。如果这是按原样剪切和粘贴,那么我看不出它是如何编译的。

假设您在连接语句中使用了 "comboBox1",那么真正的问题是您永远不会分配给成员变量 "comboBox2" 并且当您的槽试图使用它时,你崩溃了。