我有一个小窗口的表[] [],根据我拥有的值,我将把小部件实例化为QLabel或QCombobox。
QWidget *tab[9][9];
if(modele->firstvalue(i,j) ==0) {
tab[i][j]= new QComboBox();
tab[i][j]->setStyleSheet("border: 1px solid red");
((QComboBox)tab[i][j]).addItem("Test");
}
else {
tab[i][j] = new QLabel(QString::number(modele->firstvalue(i,j)));
}
因此,在执行后我的小部件中,我看到了所有的组合框,但没有显示值(没有添加任何项目)
PS: 这是一个数独游戏。如果有很多多个值,那么我创建一个包含所有可能值的组合框,否则创建一个具有单个值的QLabel。
答案 0 :(得分:4)
问题出在这一行:
((QComboBox)tab[i][j]).addItem("Test");
由于C演员,它有点混淆。如果你使用了C ++演员,你会写:
static_cast<QComboBox>(tab[i][j]).addItem("Test");
static_cast
是冗余语法,现在很明显代码意味着:
QComboBox(tab[i][j]).addItem("Test");
如您所见,您正在创建一个临时组合框,其中tab[i][j]
为父级,然后向其中添加项目,并在退出范围时立即销毁它。您在其上方创建了3行的原始组合框不会在此处进行修改。
相反,你需要编写(不要在C ++中使用C风格的强制转换):
static_cast<QComboBox*>(tab[i][j])->addItem("Test");
理想情况下,编写代码使您根本不需要演员:
auto box = new QComboBox;
box->setStyleSheet("border: 1px solid red");
box->addItem("Test");
tab[i][j] = box;
答案 1 :(得分:0)
而不是:
((QComboBox)tab[i][j]).addItem("Test");
使用:
((QComboBox*)tab[i][j]).addItem("Test");
由于你的网格有指向小部件的指针