Sachverhalt:
A.
Die A._ GmbH & Co. KG (Beschwerdeführerin) ist die deutsche Vertriebs- und Serviceorganisation eines amerikanischen Softwareherstellers. Die B._ (Beschwerdegegnerin) betreibt eine Bank und arbeitet mit den Softwarelösungen der A._ GmbH & Co. KG. Zwischen den Parteien bestehen Lizenzverträge.
B.
Am 15. Dezember 2016 klagte die A._ GmbH & Co. KG beim Handelsgericht des Kantons Zürich mit dem Begehren, die B._ sei zu verurteilen, ihr Fr. 3'700'000.-- nebst Zins zu 5 % "seit dem Tag der Rechtshängigkeit" zu bezahlen. Sie verlangte damit Schadenersatz für die Überlassung von vertraglich nicht erfassten Softwaremodulen.
Mit Urteil vom 25. Oktober 2018 wies das Handelsgericht die Klage ab.
C.
Die A._ GmbH & Co. KG verlangt mit Beschwerde in Zivilsachen, das Urteil des Handelsgerichts sei aufzuheben und die B._ sei zu verurteilen, ihr Fr. 3'700'000.-- nebst Zins zu 5 % "seit dem Tag der Rechtshängigkeit" zu bezahlen. Eventualiter sei die Sache zur Sachverhaltsergänzung und neuen Entscheidung an die Vorinstanz zurückzuweisen. Ferner beantragt sie, über die Beschwerde sei in einer öffentlichen Beratung zu entscheiden.
Es wurden keine Vernehmlassungen eingeholt.

Erwägungen:
1.
1.1. Der angefochtene Entscheid des Handelsgerichts hat eine Zivilrechtsstreitigkeit im Zusammenhang mit geistigem Eigentum gemäss <ref-law> zum Gegenstand. Es ist ein Endentscheid (<ref-law>) einer einzigen kantonalen Instanz im Sinne von <ref-law>. Dagegen steht grundsätzlich die Beschwerde in Zivilsachen offen, gemäss <ref-law> unabhängig vom Streitwert.
1.2. Das Bundesgericht berät den Entscheid nach <ref-law> mündlich, wenn der Abteilungspräsident beziehungsweise die Abteilungspräsidentin dies anordnet oder ein Richter beziehungsweise eine Richterin es verlangt (lit. a) oder wenn sich keine Einstimmigkeit ergibt (lit. b). Diese Voraussetzungen sind nicht erfüllt. Entsprechend entscheidet das Bundesgericht auf dem Weg der Aktenzirkulation (siehe <ref-law>).
2.
2.1. Mit Beschwerde in Zivilsachen können Rechtsverletzungen nach Art. 95 und 96 BGG gerügt werden.
Die Beschwerde ist hinreichend zu begründen, ansonsten darauf nicht eingetreten werden kann (<ref-ruling> E. 2 S. 116; <ref-ruling> E. 2.1). In der Beschwerdeschrift ist in gedrängter Form darzulegen, inwiefern der angefochtene Akt Recht verletzt (<ref-law>). Unerlässlich ist dabei, dass auf die Begründung des angefochtenen Entscheids eingegangen und im Einzelnen aufgezeigt wird, worin eine vom Bundesgericht überprüfbare Rechtsverletzung liegt. Die beschwerdeführende Partei soll in der Beschwerde an das Bundesgericht nicht bloss die Rechtsstandpunkte, die sie im kantonalen Verfahren eingenommen hat, erneut bekräftigen, sondern mit ihrer Kritik an den als rechtsfehlerhaft erachteten Erwägungen der Vorinstanz ansetzen (<ref-ruling> E. 2 S. 116, 86 E. 2 S. 89).
2.2. Das Bundesgericht legt seinem Urteil den Sachverhalt zugrunde, den die Vorinstanz festgestellt hat (<ref-law>). Dazu gehören sowohl die Feststellungen über den streitgegenständlichen Lebenssachverhalt als auch jene über den Ablauf des vor- und erstinstanzlichen Verfahrens, also die Feststellungen über den Prozesssachverhalt (<ref-ruling> E. 1.3.1 mit Hinweisen). Es kann die Sachverhaltsfeststellung der Vorinstanz nur berichtigen oder ergänzen, wenn sie offensichtlich unrichtig ist oder auf einer Rechtsverletzung im Sinne von <ref-law> beruht (<ref-law>). "Offensichtlich unrichtig" bedeutet dabei "willkürlich" (<ref-ruling> E. 2 S. 117; <ref-ruling> E. 1.5). Überdies muss die Behebung des Mangels für den Ausgang des Verfahrens entscheidend sein können (<ref-law>). Neue Tatsachen und Beweismittel dürfen nur so weit vorgebracht werden, als erst der Entscheid der Vorinstanz dazu Anlass gibt (<ref-law>). Die Partei, welche die Sachverhaltsfeststellung der Vorinstanz anfechten will, muss klar und substanziiert aufzeigen, inwiefern diese Voraussetzungen erfüllt sein sollen (<ref-ruling> E. 1.3.1 S. 18 mit Hinweisen). Wenn sie den Sachverhalt ergänzen will, hat sie zudem mit präzisen Aktenhinweisen darzulegen, dass sie entsprechende rechtsrelevante Tatsachen und taugliche Beweismittel bereits bei den Vorinstanzen prozesskonform eingebracht hat (<ref-ruling> E. 2 S. 90).
3.
Die Vorinstanz erwog, die Beschwerdeführerin habe einen nicht ersatzfähigen Nutzungsausfall eingeklagt, ohne einen Schaden im Sinne der Differenztheorie zu behaupten. Im Sinne einer Eventualbegründung ergänzte das Handelsgericht, die Beschwerdeführerin habe ohnehin nicht alle ihr zugänglichen Tatsachen dargelegt, aus denen das Gericht den Schaden hätte abschätzen können.
Die Beschwerdeführerin wendet hinsichtlich des Vorhandenseins eines Schadensein, sie habe in der Klage ausgeführt, dass sie allein zur Vergabe von Nutzungsrechten an den streitbetroffenen, von der Beschwerdegegnerin ohne Lizenz verwendeten Softwaremodulen berechtigt gewesen sei und durch den "Eingriff in die allein dem Rechtsinhaber zugewiesene Nutzungsmöglichkeit" ein Schaden entstanden sei. Der Zeuge C._ habe dargestellt, dass die "Listenpreise", welche als Grundlage für die Schadensberechnung herangezogen werden könnten, auf dem Markt tatsächlich erzielt würden.
Unter dem Titel "Schadenshöhe" bringt die Beschwerdeführerin vor, sie habe die Auffassung vertreten, der eingetretene Schaden sei anhand der Methode der Lizenzanalogie zu berechnen. Es sei klar, dass sie die Softwaremodule nur gegen Entgelt auf dem Markt vertreibe, und sie habe die Lizenzmetrik sowie die Lizenzpreise detailliert vorgetragen und unter Beweis gestellt. Die Parteien seien bereit gewesen, einen entsprechenden Lizenzvertrag abzuschliessen.
4.
Die Beschwerdeführerin verkennt die in Erwägung 2.2 dargelegten Anforderungen, die an Sachverhaltsrügen im bundesgerichtlichen Verfahren gestellt werden:
Sie meint zwar, einen "Schaden im Sinne des Schadenersatzrechts" behauptet und unter Beweis gestellt zu haben. Zu diesem Ergebnis komme man bei "einer vollständigen Wertung [ihres] Vortrags". Weiter moniert sie, "Einlassungen und Beweisangebote" seien nicht berücksichtigt worden, und sie verweist auf Ausführungen, die sie "in der Klage" gemacht habe. Indes legt sie mit Bezug auf kein einziges dieser Vorbringen mit Aktenhinweisen präzise dar, wo solche Behauptungen aufgestellt worden sein sollen. Es ist nicht Aufgabe des Bundesgerichts, die vorinstanzlichen Eingaben der Parteien zu durchforsten, sondern es wäre grundsätzlich an der Beschwerdeführerin, auf eine exakte Fundstelle, namentlich eine Seitenzahl oder eine Randziffer, zu verweisen (vgl. Urteil 4A_633/2017 vom 23. Mai 2018 E. 3.2). Dies unterlässt sie in ihrer Beschwerdeschrift vollumfänglich. Gleiches gilt für die Passagen zur Schadenshöhe, wo sie wiederum ohne Aktenhinweise aus Klage sowie Replik zitiert und den pauschalen Einwand in den Raum stellt, "aus dem Pr[oz]essstoff der Vorinstanz" ergebe sich, dass sie bereit gewesen wäre, mit der Beschwerdegegnerin "einen entsprechenden Lizenzvertrag" abzuschliessen. Auf die Sachverhaltsergänzungen der Beschwerdeführerin ist demnach nicht einzutreten.
5.
5.1. In der Sache geht die Kritik der Beschwerdeführerin an den Erwägungen der Vorinstanz vorbei, jedenfalls was die vorinstanzliche Hauptbegründung (Vorhandensein eines Schadens) betrifft. Das Handelsgericht nahm auf die bundesgerichtliche Rechtsprechung Bezug (auf die auch die Beschwerdeführerin in ihrer Beschwerdeschrift verweist), wonach auch die - der Schadensbemessung dienende - Methode der Lizenzanalogie den Nachweis einer beim Verletzten eingetretenen Vermögensverminderung voraussetze (<ref-ruling> E. 3.4). Die Folgerung der Vorinstanz, die Beschwerdeführerin habe (trotz Substanziierungshinweis) keinen Schaden in diesem Sinne behauptet, kann die Beschwerdeführerin nicht einzig mit dem Einwurf in Frage ziehen, die Beschwerdegegnerin habe urheberrechtlich geschützte Softwaremodule ohne Lizenz genutzt und die von ihr genannten "Listenpreise" würden auf dem Markt tatsächlich erzielt. Sie wiederholt damit in pauschaler Weise ihre Darstellungen vor Vorinstanz, ohne in Auseinandersetzung mit der vorinstanzlichen Begründung aufzuzeigen, inwiefern ihr ein obligationenrechtlich relevanter Schaden entstanden sein soll und wo sie einen solchen vor Vorinstanz geltend gemacht haben will (siehe Erwägung 2.1).
5.2. Im Übrigen ist die Rüge der Beschwerdeführerin auch unbegründet, soweit sie die vorinstanzliche Eventualbegründung betrifft. Die Vorinstanz wies zu Recht darauf hin, dass der Kläger auch im Anwendungsbereich von <ref-law> und unabhängig von der Schadensbemessungsmethode alle ihm zugänglichen Umstände darzulegen hat, anhand derer das Gericht den Schaden allenfalls abschätzen kann (vgl. <ref-ruling> E. 2.3 S. 160; <ref-ruling> E. 8.2.5.2 S. 323; <ref-ruling> E. 3.2). Solche Tatsachen habe die Beschwerdeführerin - so die Vorinstanz - indes nicht vorgebracht. Bei dieser Feststellung hat es mangels hinreichender Sachverhaltsrüge (siehe Erwägungen 2.2 und 4) sein Bewenden. Entsprechend ist nicht zu beanstanden, wenn das Handelsgericht schloss, die Beschwerdeführerin habe der Behauptungslast unter diesem Aspekt nicht Genüge getan, und ihr auch aus diesem Grund keinen Schadenersatz zugesprochen hat.
6.
Die Beschwerde ist abzuweisen, soweit darauf eingetreten werden kann. Bei diesem Ausgang des Verfahrens sind die Gerichtskosten gemäss <ref-law> der Beschwerdeführerin aufzuerlegen. Der Beschwerdegegnerin ist kein Aufwand entstanden, für den sie nach <ref-law> zu entschädigen wäre.

Demnach erkennt das Bundesgericht:
1.
Die Beschwerde wird abgewiesen, soweit darauf einzutreten ist.
2.
Die Gerichtskosten von Fr. 22'000.-- werden der Beschwerdeführerin auferlegt.
3.
Dieses Urteil wird den Parteien und dem Handelsgericht des Kantons Zürich schriftlich mitgeteilt.
Lausanne, 26. Februar 2019
Im Namen der I. zivilrechtlichen Abteilung
des Schweizerischen Bundesgerichts
Die Präsidentin: Kiss
Der Gerichtsschreiber: Stähle