Seite 1 von 1

Eigene Shell für Scriptsprache?

Verfasst: 12. Juli 2007 07:51
von NoRulez
Hey @all,

ich hätte vor für eine eigene kleine Scriptsprache eine Art Shell-Fenster in meinem Programm zu haben, soll in der Art wie bei der Python-IDE (IDLE) oder Perl-IDE sein.

Also ungefähr so:

Code: Alles auswählen

Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.

    ****************************************************************
    Personal firewall software may warn about the connection IDLE
    makes to its subprocess using this computer's internal loopback
    interface.  This connection is not visible on any external
    interface and no data is sent to or received from the Internet.
    ****************************************************************
    
IDLE 1.2.1      ==== No Subprocess ====
>>> print "Hello"
Hello
>>> 
Das ganze hätte ich mit einem QTextEdit und einer SubClass von QSyntaxHighlighther gemacht. Mein Problem ist jetzt nur das ich nicht zwischen den eingegebenen Kommandos (also alles ab ">>> ") und dem Status Text (der Rest inkl. ">>> ") unterscheiden kann, somit kann der Benutzer ja auch die Statusmeldungen mit der Backspace oder Entf Taste wieder löschen.
Was wiederrum blöd ist weil ich nicht weiß was ich interpretieren soll und was nicht. Hoffe es versteht jemand was ich meine.

Hat da jemand einen Rat?

Vielen Dank im Voraus

Lg NoRulez

Verfasst: 12. Juli 2007 09:11
von upsala
Häng dich an den QTextCursor ran, und blockiere diesen wenn er in einen Bereich gehen will, in dem er nichts zu suchen hat.

Verfasst: 12. Juli 2007 21:11
von NoRulez
Danke, hat bisher super damit funktioniert.

Jedoch stehe ich vor einem Problem und zwar:

Code: Alles auswählen

eventFilter....

				case Qt::Key_Home: {
						int pos_orig = this->textCursor().position();
						int pos = pos_orig;
						while(lines.find(pos) == lines.end())
							pos--;
						bool a = this->textCursor().movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, pos_orig - pos);
						return true;
					}
					break;
Die Variable "a" ist auch true, jedoch bewegt sich der Cursor nicht :(

Habe ich da einen falschen Ansatz?
Übrigens, in der map "lines" befindet sich der minimale Anfangswert/Zeile zu dem gesprungen werden darf, davor darf nicht gesprungen werden.

Lg NoRulez

Verfasst: 12. Juli 2007 21:16
von NoRulez
OK, danke hat sich erledigt, habe noch diesen Thread gefunden: http://www.qtforum.de/forum/viewtopic.p ... etposition

mit folgendem code abschnitt funktionierts

Code: Alles auswählen

QTextCursor cursor=TxtEdit->textCursor();
cursor.setPosition(...);
TxtEdit->setTextCursor(cursor); 
also in meinem Fall da wie folgt:

Code: Alles auswählen

eventFilter....

				case Qt::Key_Home: {
						int pos_orig, pos;
						pos_orig = pos = this->textCursor().position();

						while(lines.find(pos) == lines.end())
							pos--;

						QTextCursor cursor = this->textCursor();
						cursor.movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, pos_orig - pos);
						this->setTextCursor(cursor); 

						return true;
					}
					break;
Lg NoRulez