0

qtでは、tablewidgetを使用して100行を格納します。最初に、行を埋めるためにtableWidgetItemsを新しくしました。実行中に、アイテムのプロパティを設定し、「新規」ではなくなりました。しかし、 「ui-> tableWidget-> setRowCount(index);」を使用した後に見つかりました。、後で100に戻すと、コード"ui-> tableWidget-> item(index、0)-> setText(...);" プログラムをクラッシュさせます。それはとても悪いです!!! ;(デバッグして、「100に戻す前に」行数として設定された新しいインデックス>インデックスを見つけました。

行数を少なく設定すると、システムはテーブルアイテムを自動的に削除しましたか?

私のコードでさえ私が作成したオブジェクトの存続期間を決定できないので、私はこれをとても恐れています...行数を設定した後にそれらを「生きている」状態に保つ方法を誰かが知っていますか?(そうでなければ、私はそれらを新しくしなければなりません...)。私のかわいそうなELisを読むのに忍耐を持ってくれて本当に感謝しています:)

新着:

//TABLE
    ui->tableWidget->setColumnCount(3);
    ui->tableWidget->setRowCount(100);
    ui->tableWidget->setHorizontalHeaderLabels(headers);

    for(int i = 0; i < 100; i++)//new
    {
        ui->tableWidget->setItem( i, 0 , new QTableWidgetItem(""));//time
        ui->tableWidget->setItem( i, 1 , new QTableWidgetItem(""));//name
        ui->tableWidget->setItem( i, 2 , new QTableWidgetItem(""));//BITS
    }

関連するコード行のみ:

   {
    int  index = 0;
    for(int queue_i = size_1; queue_i >= 0; queue_i--)
    {


        if(logDisplayQueue.at(queue_i).at(3) == "0" ||   logDisplayQueue.at(queue_i).at(3) == "2")continue;


        QStringList BITList = bits2Hexs(queue_i);


     ui->tableWidget->item(index, 0)->setText(logDisplayQueue.at(queue_i).at(0));//time
     ui->tableWidget->item(index, 1)->setText(logDisplayQueue.at(queue_i).at(1));//name
     ui->tableWidget->item(index, 2)->setText(BITList.join(""));//BITS

        if(queue_i == oldRowItemNo)ui->tableWidget->selectRow(index);
        index++;
    }

        ui->tableWidget->setRowCount(index);//set row count to be 30 more or less
    }

別の機能:

    {

        ui->tableWidget->setRowCount(100);//back to be 100 again


        for(int queue_i = size_1, index = 0; queue_i >= 0; queue_i--, index++)
        {

            QStringList BITList = bits2Hexs(queue_i);
     ui->tableWidget->item(index, 0)->setText(logDisplayQueue.at(queue_i).at(0));//time
     ui->tableWidget->item(index, 1)->setText(logDisplayQueue.at(queue_i).at(1));//name
     ui->tableWidget->item(index, 2)->setText(BITList.join(""));//BITS
//In debugging, when index reches the value of old row-count, "->setText" crashes the    //program.


            if(queue_i == oldRowItemNo)ui->tableWidget->selectRow(index);
        }

    }

実行中は、「命令0x00421727は0x00000000メモリを参照しています。メモリを読み取ることはできません」のようなメッセージを返します。

この行からコメントすると:'ui-> tableWidget-> setRowCount(index); //行数を30程度に設定'、クラッシュすることなく正常に実行され、index-referred-rowの後の行はと同じデータを表示します前。

4

1 に答える 1

3

setRowCountテーブルが正確にその数の行を保持することを保証します。以前より多くの行があった場合index、それらの行はなくなります (削除されます)。

行を一時的に非表示にする場合は、行数をリセットするのではなく、おそらくhideRow(int)/を使用する必要があります。showRow

于 2012-10-07T12:10:41.173 に答える