Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[QT]Jak sprawdzić kto wywołał zdarzenie?

Ostatnio zmodyfikowano 2011-05-04 14:26
Autor Wiadomość
mar3
Temat założony przez niniejszego użytkownika
[QT]Jak sprawdzić kto wywołał zdarzenie?
» 2011-05-03 21:31:18
W swojej aplikacji w menu plik->ostatnio otwarte chcę umieścić listę ostatnio otwartych plików. Będę tę listę pobierał z pliku. Problem w tym, że chciałem do wszystkich elementów ustawić 1 gniazdo. Po kliknięciu w dany element otworzy się odpowiedni plik. Więc w jakiś sposób w tym gniaździe muszę rozpoznać kto wywołał zdarzenie tylko nie wiem jak to zrobić? Czy ktoś ma jakiś pomysł?
P-32590
DejaVu
» 2011-05-03 22:24:22
W zasadzie to nie wiem o co chodzi Ci z tym całym 'gniazdem' jak to ująłeś. Nie wiadomo też co rozumiesz przez stwierdzenie 'kto' - sugeruje to osobę, ale chyba nie to miałeś na myśli.
P-32598
dmx81
» 2011-05-04 00:58:30
wyjasnij dokladniej, o co ci chodzi, to pewnie doczekasz sie odpowiedzi szybciej, bo tak, to temat bedzie 'wisial' bez odpowiedzi.
Czy program ma tworzyc liste wszystkich otwieranych plikow na komputerze? (tzn otwierasz dokument worda, mp3, obrazek jpg - chcesz, zeby ich nazwy byly zapisywane?
Czy raczej pliki otwarte twoim programem maja byc zapamietywane (to na pewno duzo prosciej - bo otwierajac jakikolwiek plik w programie, musisz uzyc jego nazwy - wpisujac lub wybierajac np z listy badz jakiegos kontenera/tablicy nazw). Wtedy wystarczy tylko w tym momencie dopisac biezaca nazwe pliku do swojej listy otwieranych plikow.
A jesli chodzi o przypadek pierwszy, wydaje mi sie, ze trzeba uzyc WinAPI, ktorego niestety nie znam, ale wielu innych zna bardzo dobrze, wiec z pewnoscia odpowiedza (mozna tez sprobowac poszukac w necie).

P-32602
mar3
Temat założony przez niniejszego użytkownika
» 2011-05-04 10:29:12
1)DejaVu gniazdo(ang. slot) jest to metoda klasy, która jest wywoływana wtedy, gdy zostanie wyemitowany połączony z tym gniazdem sygnał

2)dmx81 chodzi mi o drugi przypadek. Gdy ktoś otwiera plik w moim programie to ja zapisuje jego ścieżkę do pliku. Podczas uruchamiania mój programu wczytuje te ścieżki plików do jednowymiarowej tablicy. Ścieżki wczytane do tablicy dodaje do menu plik->ostatnio otwarte->. Po kliknięciu danej ścieżki (w menu) chcę żeby otworzył się dany plik. Do każdej ścieżki (w menu) dodałem ten sam SLOT i chciałbym teraz w tym slocie rozpoznać który element menu został wciśnięty (która ścieżka w menu), aby otworzyć odpowiedni plik.
P-32604
pixelmaster
» 2011-05-04 12:02:15
Nie dałeś kodu : (
Menu masz pewnie na QMenu.
Więc to co wczytujesz z pliku pewnie dodajesz do QMenu jako QAction.
Więc możesz użyć sygnału void QMenu::triggered ( QAction * action ) z QMenu i podpiąć go do jakiegoś slotu np. void Window::wybrany_z_menu(QAction * action)
i wtedy wyciągasz z action tekst czyli ścieżkę do pliku: QString path = action->text();
P-32605
mar3
Temat założony przez niniejszego użytkownika
» 2011-05-04 13:08:23
Napisałem coś takiego i nie działa. Błąd nie wyskoczył. Aplikacja się uruchomiła, ale klikam w menu i nic się nie dzieje.
C/C++
MainWindow::MainWindow( QWidget * parent )
    : QMainWindow( parent )
    , ui( new Ui::MainWindow )
{
    ui->setupUi( this );
    QTextCodec::setCodecForTr( QTextCodec::codecForName( "CP-1250" ) );
    QAction * op = new QAction( "test", this );
    ui->menuNowy->addAction( op );
    connect( op, SIGNAL( triggered( QAction * ) ), this, SLOT( selectFile( QAction * ) ) );
}

void MainWindow::selectFile( QAction * action )
{
    QMessageBox::warning( this, tr( "Uwaga" ), tr( "test." ) );
}
P-32611
pixelmaster
» 2011-05-04 13:11:28
Bo triggered to sygnał emitowany przez QMenu a nie QAction : P
C/C++
connect( ui->menuNowy, SIGNAL( triggered( QAction * ) ), this, SLOT( selectFile( QAction * ) ) );
P-32613
mar3
Temat założony przez niniejszego użytkownika
» 2011-05-04 13:16:19
Wielkie dzięki za pomoc już działa.
P-32615
« 1 » 2
  Strona 1 z 2 Następna strona