shortkeys in Applikation verwenden

Alles rund um die Programmierung mit Qt
Antworten
GBunge
Beiträge: 30
Registriert: 26. Mai 2008 12:12

shortkeys in Applikation verwenden

Beitrag von GBunge »

Hallo Programmierer,
mit Creator habe ich eine Applikation programmiert, die mit Tastenkombinationen gesteuert werden soll.
Es wurden zwei Aktionen definiert.


[code]
// OPEN-Action ++++++++++++++++++++++++++++++
openAct = new QAction( this );
openAct->setShortcuts(QKeySequence::Open);
connect(openAct, SIGNAL(triggered()), this, SLOT(read()));
this->addAction(openAct);[/u]
// Password-Action ++++++++++++++++++++++++++
pwdAct = new QAction( this );
pwdAct->setShortcuts(QKeySequence::Print);
connect(pwdAct, SIGNAL(triggered()), this, SLOT(showPWD()));
this->addAction(pwdAct);[/u]
[/code]


Nach dem Starten der Applikation funktioniert auch der erste Befehl.
Eine Datei wird eingelesen.
Nun soll eine Passwortabfrage erfolgen, aber nur nach einem "CNTR+P".
Und hier gehts nicht weiter. Die Tastenkombination wird von der Anwendung nicht akzeptiert.
Der Rechner beantwortet die Eingabe mit einem Fehlerton über den Lautsprecher.

Erst wenn ich mit der Maus in das Applikationsfenster klicke reagiert die Anwendung auf den zweiten Befehl.

Was mache ich falsch?
Versucht habe ich es mit "setFocus(this)" und mit "this->grabKeyboard()" beides hatte keinen Erfolg.
Der zweite Befehl wird nicht ohne vorherigen KLICK in das Fenster akzeptiert.

Gruss GBunge
Feuer
Beiträge: 20
Registriert: 19. April 2011 08:08

Re: shortkeys in Applikation verwenden

Beitrag von Feuer »

Hallo,

damit dein Fenster auf deine Kombination reagieren kann muss das Fenster den Fokus haben. Soll es ohne Fokus gehen, müsstest du dich mal mit Global Hooks beschäftigen.
Was genau passiert genau nach dem read() aufgerufen wurde? Öffnet sich womöglich ein weiteres Fenster?

Gruß
GBunge
Beiträge: 30
Registriert: 26. Mai 2008 12:12

Re: shortkeys in Applikation verwenden

Beitrag von GBunge »

Hallo Feuer,
danke für die schnelle Antwort.
geplanter Ablauf:
1. erster Befehl ( CTRL+O ) eine PNG-Datei einlesen.
2. das Image skalieren und als Pixmap in ein QLabel laden. ( Label ist sichtbar )
danach passiert nichts mehr. Die Anwendung wartet sozusagen auf den nächsten Befehl
3. zweiter Befehl ( CNTR+P ) startet weitere Aktionen innerhalb der Applikation.

Nach Deiner Anregung habe ich nochmals versucht, nach dem Laden der Pixmap,
am Ende der read-Methode durch ein "this->setFocus()" das Problem zu lösen.
Funktioniert aber nicht, der zweite Befehl hat erst nach einem KLICK in das Hauptfenster
eine entsprechende Reaktion.

Gruß
Feuer
Beiträge: 20
Registriert: 19. April 2011 08:08

Re: shortkeys in Applikation verwenden

Beitrag von Feuer »

Hallo GBunge

ich habe es gerade bei mir probiert und es klappt einwandfrei!
Wäre interessant deine Implementierung zu sehen.

Hier ist meine:

Code: Alles auswählen

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QAction * openAct = new QAction(this);
    openAct->setShortcut(QKeySequence::Open);
    connect(openAct, SIGNAL(triggered()), this, SLOT(load()));
    this->addAction(openAct);

    QAction * pwdAct = new QAction(this);
    pwdAct->setShortcut(QKeySequence::Print);
    connect(pwdAct, SIGNAL(triggered()), this, SLOT(showPwd()));
    this->addAction(pwdAct);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::showPwd() {
    QMessageBox::information(this, "Pwd", "Hier kommt pwd");
}

void MainWindow::load()
{
    QPixmap pixmap("/deinpfad.png");
    ui->label->setPixmap(pixmap);
}
Liebe Grüße
Antworten