[gelöst] Zeichen an den Text in QLineEdit anhaengen

Alles rund um die Programmierung mit Qt
Antworten
Fabeltier
Beiträge: 33
Registriert: 3. Juni 2007 04:46
Wohnort: München

[gelöst] Zeichen an den Text in QLineEdit anhaengen

Beitrag von Fabeltier »

Hallo, ich moechte eine QToolBar zum einsetzen von "Sonderzeichen" erstellen. Das Fenster enthaelt jedoch auch verschiedene QLineEdits und beim klicken auf ein "Sonderzeichen" der QToolBar, soll dieses nun genau an die Stelle, wo sich der Cursor gerade befindet, gesetzt werden.

Fragen:
Wie finde ich das "aktive" QLineEdit heraus?
Wie erhalte ich die aktuelle Cursor Position?
Wie haenge ich es an den Text an der aktuellen Cursorposition an?


Ich habe folgendes Beispiel dazu geschrieben:

main.cpp

Code: Alles auswählen


#include "Toolbar.hpp"

int main(int argc, char **argv)
{
    QApplication app(argc, argv);
    Toolbar* toolbar = new Toolbar();
    toolbar->show();
    return app.exec();
};
Toolbar.hpp

Code: Alles auswählen

#ifndef TOOLBAR
#define TOOLBAR

#include <QtGui>
#include <iostream>

class Toolbar : public QMainWindow
{
    Q_OBJECT

private slots:
    void slotInsertLetter(){ 
        QString szLetter = "";
        QAction *action = qobject_cast< QAction* >(sender());
        if(action) szLetter = action->data().toString();
        // FIXME
        std::cout << "szLetter ist \""<< szLetter.toStdString() 
                  << "\" und sollte nun an genau an die Stelle gesetzt werden,"
                  << "wo der Curser gerade steht!\n";
    };

private:
    QAction *act1, *act2, *act3;
    QLineEdit *le1, *le2;
    QToolBar *tb;

    void initGUI(){
        le1 = new QLineEdit();
        le2 = new QLineEdit();
        QVBoxLayout* layout = new QVBoxLayout();
        layout->addWidget(le1);
        layout->addWidget(le2);
        setCentralWidget(new QWidget());
        centralWidget()->setLayout(layout);
    };

    void createActions(){
        act1 = new QAction(tr("ä"), this);
        act1->setData("ä");
        connect(act1, SIGNAL(triggered()), this, SLOT(slotInsertLetter()));
        act2 = new QAction(tr("ö"), this);
        act2->setData("ö");
        connect(act2, SIGNAL(triggered()), this, SLOT(slotInsertLetter()));
        act3 = new QAction(tr("ü"), this); 
        act3->setData("ü");
        connect(act3, SIGNAL(triggered()), this, SLOT(slotInsertLetter()));
    };
    
    void createToolBar(){
        tb = addToolBar(tr("letters"));
        tb->addAction(act1);
        tb->addAction(act2);
        tb->addAction(act3);
    };
    
public:
    Toolbar(){
        initGUI();
        createActions();
        createToolBar();
    };
};
#endif
PS: der Code kompiliert durch und laeuft! Er gibt allerdings das ausgewaehlte Zeichen auf der Konsole aus, statt es in eines der beiden QLineEdits zu sezten.
Zuletzt geändert von Fabeltier am 30. Juni 2007 21:11, insgesamt 1-mal geändert.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Code: Alles auswählen

void slotInsertLetter()
{
	QString szLetter = "";
	QAction *action = qobject_cast< QAction* >(sender());
	if(action) szLetter = action->data().toString();
	if (le1->hasFocus())
		le1->insert(szLetter);
};
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Zumindest Frage zwei und drei lässt sich durch ein leichtes suchen in der Doku finden... http://doc.trolltech.com/4.3/qlineedit.html
Das gerade aktive QLineEdit rauszufinden ist etwas schwieriger, da, sobald man einen Button anklickt, das LineEdit ja nicht mehr aktiv ist... aber da das QLineEdit kurz bevor es den Fokus verliert, ein Signal aussendet (void QLineEdit::editingFinished ()) sollte auch das kein Problem sein.

/edit:
@macman: Ich glaube nicht dass das QLineEdit an der Stelle den Fokus noch hat... er will es ja per Button-Klick einfügen und deshalb hat wohl der Button den Fokus.
Zuletzt geändert von Christian81 am 21. Juni 2007 15:50, insgesamt 1-mal geändert.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Fabeltier
Beiträge: 33
Registriert: 3. Juni 2007 04:46
Wohnort: München

Beitrag von Fabeltier »

Danke! :D
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Christian81 hat geschrieben:@macman: Ich glaube nicht dass das QLineEdit an der Stelle den Fokus noch hat... er will es ja per Button-Klick einfügen und deshalb hat wohl der Button den Fokus.
Ich war mir auch nicht sicher, deshalb habe ich es vorher probiert :-) Sonst hätte man sich eben das aktive Lineedit und die Cursorposition merken müssen.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
Antworten