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
shortkeys in Applikation verwenden
Re: shortkeys in Applikation verwenden
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ß
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ß
Re: shortkeys in Applikation verwenden
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ß
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ß
Re: shortkeys in Applikation verwenden
Hallo GBunge
ich habe es gerade bei mir probiert und es klappt einwandfrei!
Wäre interessant deine Implementierung zu sehen.
Hier ist meine:
Liebe Grüße
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);
}