Fatti: A. Nel dicembre 2006 la C._SA ha stipulato, quale committente, con la B._Sagl un contratto quadro (Master Agreement Information Management Services), che sostituiva i precedenti accordi e che definiva i termini e le condizioni della collaborazione fra i contraenti in materia di fornitura di servizi di gestione e di tecnologia delle informazioni. Concluso per un periodo indeterminato, poteva essere disdetto per la prima volta il 31 dicembre 2010 con un preavviso di 6 mesi. Le parti hanno poi sottoscritto 13 contratti di servizio (Service Level Agreements; SLA) a cui andavano applicati i termini e le condizioni della predetta convenzione. Il 15 ottobre 2009 la C._SA ha rescisso tutti i contratti con effetto immediato invocandone la violazione. B. Con petizione 13 dicembre 2011 la B._Sagl ha convenuto in giudizio innanzi al Pretore della giurisdizione di Mendrisio-nord la C._SA - che nel corso della causa ha mutato la propria ragione sociale in A._SA - per ottenere il pagamento di fr. 5'621'365.73, ridotti in sede di conclusioni a fr. 5'481'675.73, oltre interessi, e la restituzione di attrezzature e macchine. Il predetto montante era composto di fr. 102'060.-- legati ai costi di controllo e riassetto dei predetti strumenti, fr. 125'214.-- a saldo delle mercedi maturate prima della disdetta, fr. 5'225'835.38 per le mercedi previste fino alla scadenza del termine contrattuale e fr. 28'566.35 quale rifusione delle spese legali preprocessuali. Il Pretore ha, con sentenza 26 aprile 2017 e in parziale accoglimento della petizione, condannato la A._SA a versare alla B._Sagl fr. 227'274.--, oltre interessi, e a restituire le attrezzature e le macchine rivendicate. Dopo aver ritenuto ingiustificata la disdetta dei contratti, il Pretore ha considerato che domandando quale risarcimento del danno il guadagno lordo, l'attrice non aveva né allegato né dimostrato il danno. Per analoghi motivi ha respinto la richiesta di rimborso delle spese legali preprocessuali. Ha per contro reputato giustificata sia la richiesta di rimunerare il lavoro già svolto sia quella di risarcire i costi di controllo e riassetto delle macchine, che sono da restituire. C. La II Camera civile del Tribunale di appello del Cantone Ticino ha, con sentenza 22 gennaio 2019, in parziale accoglimento dell'appello della B._Sagl, aumentato a fr. 5'351'049.38 l'importo dovuto a quest'ultima. Ha posto le tasse di giustizia di prima e seconda istanza in ragione di 19/20 a carico della convenuta, la quale è pure stata condannata a pagare all'attrice fr. 87'500.-- rispettivamente fr. 45'000.-- a titolo di ripetibili parziali. Ha per contro respinto, nella misura in cui era ricevibile, l'appello incidentale della A._SA, ponendo integralmente a suo carico le spese processuali e le ripetibili di tale procedura. La Corte cantonale ha respinto o dichiarato inammissibili tutte le lamentele rivolte contro il mancato riconoscimento delle violazioni contrattuali imputate all'attrice e ha negato l'esistenza di giusti motivi che giustificherebbero la disdetta anticipata. Ha ritenuto che la B._Sagl ha sufficientemente sostanziato la sua perdita di guadagno, mentre la A._SA non è riuscita ad allegare e provare i risparmi attribuiti alla controparte in seguito alla fine dei rapporti contrattuali. Ha invece accolto le critiche della convenuta dirette contro la rifusione dei costi attinenti al controllo e al riassetto delle macchine, ragione per cui ha dedotto fr. 102'060.-- dalla pretesa attorea. D. Con ricorso in materia civile del 27 febbraio 2019 la A._SA postula, previo conferimento dell'effetto sospensivo al gravame, in via principale, l'integrale reiezione dell'appello principale e il parziale accoglimento dell'appello incidentale nel senso di essere condannata a pagare alla B._Sagl fr. 125'214.--, con la relativa modifica delle spese processuali di prima e seconda istanza. In via subordinata postula l'annullamento della sentenza di appello con il rinvio della causa al Pretore o al Tribunale di appello per nuova decisione. Lamenta una determinazione errata del danno e ribadisce diverse violazioni contrattuali ritenute idonee a giustificare la disdetta. Rimprovera alla Corte cantonale di avere a torto inserito nel giudizio sull'appello principale, invece che in quello sull'appello incidentale, l'accoglimento della censura diretta contro la rifusione dei costi di controllo e riassetto, falsando in questo modo il giudizio sulle spese processuali. La B._Sagl ha proposto, con risposta 11 aprile 2019, di respingere sia la domanda di misure d'urgenza sia il ricorso. Il 26 aprile 2019 la A._SA ha presentato una replica spontanea. La Presidente della Corte adita ha respinto, con decreto 1° maggio 2019, la domanda di conferimento dell'effetto sospensivo. La B._Sagl ha duplicato il 14 maggio 2019.