【问题标题】:QStandardItem redefinition errorQStandardItem 重新定义错误
【发布时间】:2018-06-14 19:39:03
【问题描述】:

我正在尝试在 Qt 中使用 QStandardItemModel 制作模型。我已经通过以下两种方式做到了。在第二种方法中,我只是扩展了循环,我得到了redefinition of 'item' 错误,而第一种方法工作正常。

  • 方法一

    QStandardItemModel * model = new QStandardItemModel( 3, 1 );
    QStringList modelStepsTags = {"item-1","item-2","item-3"};
    for( int r=0; r<3; r=r+1 )
    {
        QStandardItem *item = new QStandardItem( modelStepsTags.at(r) );
        model->setItem(r, 0, item);
    }
    
  • 方法二

    QStandardItemModel * model = new QStandardItemModel( 3, 1 );
    QStringList modelStepsTags = {"item-1","item-2","item-3"};
    QStandardItem *item = new QStandardItem( modelStepsTags.at(0) );
    model->setItem(0, 0, item);
    QStandardItem *item = new QStandardItem( modelStepsTags.at(1) );
    model->setItem(1, 0, item);
    QStandardItem *item = new QStandardItem( modelStepsTags.at(2) );
    model->setItem(2, 0, item);
    

【问题讨论】:

  • QStandardItem *item在同一个范围内不止一次是定义重定义。将第二个和后续的 QStandardItem *items 更改为 item 以重新使用第一个定义。

标签: c++ qt qstandarditem


【解决方案1】:

项目被定义了 3 次。

QStandardItemModel * model = new QStandardItemModel( 3, 1 );
QStringList modelStepsTags = {"item-1","item-2","item-3"};
QStandardItem *item = new QStandardItem( modelStepsTags.at(0) ); // here
model->setItem(0, 0, item);
QStandardItem *item = new QStandardItem( modelStepsTags.at(1) ); // here
model->setItem(1, 0, item);
QStandardItem *item = new QStandardItem( modelStepsTags.at(2) ); // and here
model->setItem(2, 0, item);

你可以避免重复使用第一个定义

QStandardItemModel * model = new QStandardItemModel( 3, 1 );
QStringList modelStepsTags = {"item-1","item-2","item-3"};
QStandardItem *item = new QStandardItem( modelStepsTags.at(0) );
model->setItem(0, 0, item);
item = new QStandardItem( modelStepsTags.at(1) ); // reuse
model->setItem(1, 0, item);
item = new QStandardItem( modelStepsTags.at(2) ); // reuse
model->setItem(2, 0, item);

或者完全丢弃变量,因为它是多余的

QStandardItemModel * model = new QStandardItemModel( 3, 1 );
QStringList modelStepsTags = {"item-1","item-2","item-3"};
model->setItem(0, 0, new QStandardItem( modelStepsTags.at(0) ));
model->setItem(1, 0, new QStandardItem( modelStepsTags.at(1) ));
model->setItem(2, 0, new QStandardItem( modelStepsTags.at(2) ));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    相关资源
    最近更新 更多