示例#1
0
void QKeyPushButton::getKeyPress(bool capsStatus)
{
	int 		keyCode = 0;
	QKeyEvent	*key = NULL;
	QString		text = this->text();
	//
	// per tutti i car speciali tranne il CAPS (RETURN, ALT, SHIFT, ecc...) inoltra al componente widgetKeyBoard:
        if (NO_SPECIAL_KEY(text) == false && (IS_BACK(text) == true || IS_BACK_EMB(text) == true || IS_TAB(text) == true || IS_RETURN(text) == true || IS_CTRL_LEFT(text) == true ||
                        IS_ALT(text) == true || IS_CANC(text) == true || IS_CUT_LEFT(text) == true || IS_PASSWORD(text) || IS_PASSWORD_EMB(text) || IS_PASTE(text) || IS_COPY(text)))
		key = new QKeyEvent(QEvent::KeyPress, keyCode, Qt::NoModifier, text);
	else { // trattasi di caratteri stampabili
		keyCode = text.toAscii()[0]; // prende il valore numerico (sempre maiuscolo)
                if (capsStatus == false) { // se deve prendere minuscolo, controlla se il carattere è alfabetico
                    if (keyCode >= tr("A")[0] && keyCode <= tr("Z")[0]) {
                            keyCode += 32; // carattere piccolo
                            text = (char ) keyCode; // carattere piccolo
                    }
                    key = new QKeyEvent(QEvent::KeyPress, keyCode, Qt::NoModifier, text);
		}
		else
                    key = new QKeyEvent(QEvent::KeyPress, keyCode, Qt::ShiftModifier, text);
	}
        ((widgetKeyBoard *) this->m_parent)->receiptChildKey(key, NULL);
	QCoreApplication::processEvents();
}
//
// riceve i caratteri che sono stati digitati:
void widgetKeyBoard::receiptChildKey(QKeyEvent *event, QLineEdit *focusThisControl, bool reset)
{
        static QLineEdit    *nextInput = NULL;

	if (reset == true) { // reinizializza il controllo
                nextInput = this->getNextTextbox(focusThisControl, true);
		return;
	}        
	if (nextInput == NULL)
		return;        
	//
	// inizia l'analisi del carattere ricevuto:
	QString	newKey = event->text();
	QString tmpReceiptString = nextInput->text();
        int     tmpPos = nextInput->cursorPosition();

        if (NO_SPECIAL_KEY(newKey) == false) {
            if (IS_RETURN(newKey) == true || IS_TAB(newKey) == true) { // trattasi di TAB, si sposta alla text successiva
                nextInput = this->setDefaultTextStyle(nextInput);
                nextInput->deselect();
                nextInput = this->getNextTextbox();
                this->controlKeyEcho(nextInput); // status of key echo here
                if (nextInput != NULL) {
                    nextInput->setCursorPosition(nextInput->text().length()); // comment this line if you want caret position at current char inserted
                    nextInput->setFocus(Qt::TabFocusReason);
                }
            }
            else if (IS_BACK(newKey) == true || IS_BACK_EMB(newKey) == true) { // trattasi di CANCELLARE carattere, elimina il carattere a sinistra
                if (tmpPos-1 >= 0) {
                    tmpReceiptString = tmpReceiptString.remove(tmpPos-1, 1);
                    nextInput->setText(tmpReceiptString);
                    nextInput->setCursorPosition(tmpPos-1);
                    nextInput->setSelection(tmpPos-2, 1);
                }
            }
            else if (IS_CANC(newKey) == true) { // trattasi di CANC carattere, elimina il carattere a destra
                 tmpReceiptString = tmpReceiptString.remove(tmpPos, 1);
                 nextInput->setText(tmpReceiptString);
                 nextInput->setCursorPosition(tmpPos);
                 nextInput->setSelection(tmpPos-1, 1);
            }
            else if (IS_COPY(newKey) == true || IS_CUT_LEFT(newKey) == true) {
                QPushButton *button = this->findChild<QPushButton *>(KEY_PASTE);

                if (button != NULL) {
                    if (nextInput->text().length() != 0) {
                        this->m_clipboard->setText(nextInput->text());
                        if (IS_CUT_LEFT(newKey) == true)
                            nextInput->setText("");
                        button->setEnabled(true);
                    }
                    else
                        button->setEnabled(false);
                }
            }
            else if (IS_PASTE(newKey) == true)
                nextInput->setText(this->m_clipboard->text());
            else if (IS_ALT(newKey) == true || IS_CTRL_LEFT(newKey) == true)
                ; // non esegue nessuna operazione
        }
        else { // si tratta di un carattere da visualizzare nella casella di testo corrente
            tmpReceiptString = tmpReceiptString.insert(tmpPos, newKey);
            nextInput->setText(tmpReceiptString);
            nextInput->setCursorPosition(tmpPos+1);
            nextInput->setSelection(tmpPos, 1);
	}
}