|  |  |  | @ -181,15 +181,14 @@ void BinaryViewModel::updateState() { | 
			
		
	
		
			
				
					|  |  |  |  |   auto prev_items = items; | 
			
		
	
		
			
				
					|  |  |  |  |   const auto &binary = can->lastMessage(msg_id).dat; | 
			
		
	
		
			
				
					|  |  |  |  |   // data size may changed.
 | 
			
		
	
		
			
				
					|  |  |  |  |   if (!dbc_msg && binary.size() != row_count) { | 
			
		
	
		
			
				
					|  |  |  |  |     beginResetModel(); | 
			
		
	
		
			
				
					|  |  |  |  |   if (binary.size() > row_count) { | 
			
		
	
		
			
				
					|  |  |  |  |     beginInsertRows({}, row_count, binary.size() - 1); | 
			
		
	
		
			
				
					|  |  |  |  |     row_count = binary.size(); | 
			
		
	
		
			
				
					|  |  |  |  |     items.clear(); | 
			
		
	
		
			
				
					|  |  |  |  |     items.resize(row_count * column_count); | 
			
		
	
		
			
				
					|  |  |  |  |     endResetModel(); | 
			
		
	
		
			
				
					|  |  |  |  |     endInsertRows(); | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  |   char hex[3] = {'\0'}; | 
			
		
	
		
			
				
					|  |  |  |  |   for (int i = 0; i < std::min(binary.size(), row_count); ++i) { | 
			
		
	
		
			
				
					|  |  |  |  |   for (int i = 0; i < binary.size(); ++i) { | 
			
		
	
		
			
				
					|  |  |  |  |     for (int j = 0; j < column_count - 1; ++j) { | 
			
		
	
		
			
				
					|  |  |  |  |       items[i * column_count + j].val = ((binary[i] >> (7 - j)) & 1) != 0 ? '1' : '0'; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
	
		
			
				
					|  |  |  | @ -197,8 +196,13 @@ void BinaryViewModel::updateState() { | 
			
		
	
		
			
				
					|  |  |  |  |     hex[1] = toHex(binary[i] & 0xf); | 
			
		
	
		
			
				
					|  |  |  |  |     items[i * column_count + 8].val = hex; | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  |   for (int i = binary.size(); i < row_count; ++i) { | 
			
		
	
		
			
				
					|  |  |  |  |     for (int j = 0; j < column_count; ++j) { | 
			
		
	
		
			
				
					|  |  |  |  |       items[i * column_count + j].val = "-"; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   for (int i = 0; i < items.size(); ++i) { | 
			
		
	
		
			
				
					|  |  |  |  |   for (int i = 0; i < row_count; ++i) { | 
			
		
	
		
			
				
					|  |  |  |  |     if (i >= prev_items.size() || prev_items[i].val != items[i].val) { | 
			
		
	
		
			
				
					|  |  |  |  |       auto idx = index(i / column_count, i % column_count); | 
			
		
	
		
			
				
					|  |  |  |  |       emit dataChanged(idx, idx); | 
			
		
	
	
		
			
				
					|  |  |  | 
 |