Kezdőoldal » Számítástechnika » Programozás » Hogyan tudok menüből triggerel...

Hogyan tudok menüből triggerelni egy másik osztályban lévő metódust?

Figyelt kérdés

Van egy Qt program, ami a következőképpen épül fel:


- QMainWindow (.h, .cpp, .ui)

- Tablazat (.h, .cpp, .ui), benne egy ujSor() metódus


A QMainWindow.ui-ban létre van hozva egy menübar, benne egy "új sor hozzáadása" menüponttal.


Szeretném, hogy ha erre a menüpontra rákattintva a Tablazat.ui-ban lévő tableWidget-ben létrehozásra kerülne egy új sor.


Ami nem értek, hogy hogyan tudnám lefuttatni a menüpontra való kattintással az ujSor() metódust a Tablazat osztályban? Programkódból nem érem a Tablazat osztály elemeit, így nem is tudom hozzárendelni a menüpont triggered() akciójához.



2022. nov. 23. 21:55
 1/5 anonim ***** válasza:
Ez így elég kevés. Miért nem éred el? Én pythonban szoktam ilyeneket összerakni, menüponthoz tipikusan tartozik egy QAction példány, aminek a triggered signal-ját bekötöd a QMainWindow osztályodban egy slot-ba. Abban a slot-ban elérhető a QMainWindow példányod, abból meg kikeresed a Tablazat példányodat bármi legyen is az, mert nyilván létrehozáskor raktál oda rá valami hivatkozást, aztán meghívod rajta amit akarsz.
2022. nov. 23. 22:27
Hasznos számodra ez a válasz?
 2/5 A kérdező kommentje:

Oké, anélkül, hogy behánynám a több száz sornyi kódot, kiragadva a problémámat belőle.


[link]


Hogyan érem el a mainwindows.cpp-ből a tablazat.cpp-ben lévő ujSor()-t a menübar egy adott menüpontjára kattintva?


Nekem ez a signal-slot kínai, hiába nézem a példakódokat. A példakódok, amiket találok, azok mind adott osztályon belüli signalokra adnak példát, de nem különböző osztályok közöttre, ahogy nálam van.

2022. nov. 23. 22:36
 3/5 A kérdező kommentje:
Ui.: az ujSor() fgv.-ben van egy hiba, mert kitöröltem az elejét, de most nem ez a lényeg.
2022. nov. 23. 22:37
 4/5 anonim ***** válasza:
Gondolom lemaradt a Tablazat:: abból a sorból. Lehet osztályok között is, de az lényegesebb hogy példányokról van szó. ujSor()-t a Tablazat egy példányán tudod meghívni, nem csak úgy példány nélkül. Ez igaz a signal-slot típusú dologra is. Hol van a Tablazat példánya? (A QMainWindow-ból általában létrejön egy példány a main()-ben vagy valahol) Erre írtam, hogy ha QMainWindow-ban meghívódik egy slot arra a triggered signal-ra, akkor ott ki lehet keresni hogy a Tablazat mely példányán hívod tovább az ujSor()-t. Vagy, amikor létrejön a Tablazat egy példánya, ő rögtön fel is iratkozhat a QMainWindow példánya által kiadott signal-ra. Utóbbi esetben jön létre különböző osztályok példányai között a signal-slot kötés, ha az neked szimpatikusabb.
2022. nov. 23. 22:58
Hasznos számodra ez a válasz?
 5/5 A kérdező kommentje:

Fogalmam sincs. A tableWidget a grafikus szerkesztőn be van húzva a tablazat.ui-ra és a program indításakor automatikusan legenerálja magának.


Ha létrehozok egy példányt a Tablazat osztályból a mainwindow.cpp-ben, akkor le tudom futtatni az ujSor()-t, de annak semmilyen hatása nincsen. Gondolom azért, mert ez egy másik példány valahol a "háttérben", nem pedig az, amit a program az indításkor létrehoz.

2022. nov. 23. 23:09

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!