Anzeige:
Ergebnis 1 bis 4 von 4

Thema: Qtable Copy/Paste

  1. #1
    Registrierter Benutzer
    Registriert seit
    20.04.2006
    Beiträge
    29

    Qtable Copy/Paste

    Moin, Moin

    Ich bins schon wieder mit meinem Tabellenproblem. Also ich hab jetzt die Copy/Paste-Funktion in Angriff genommen(allerdings erstmal ohne QClipboard, also nur in der Tablle möglich). Kopieren funktioniert ohne Probleme. Aber das Einfügen bereitet mir noch Probleme. Wenn ich den Text einfüge, schreibt er in meine Zellen komische Striche. Manchmal aber auch nicht. Dieses tut er aber auch nur wenn ich in der ersten Spalte den Text einfügen will. Außerdem stürtzt mein Programm ab wenn ich zuviel Text kopieren will. Ich hab mich auch am csv Format orientiert (danke an anda_skoa für den Tip), nur das ich kein "\" benutze sonder "/". Weil er den Backslash als einzelnes Zeichen nicht in den String schreibt.

    Meine beiden Fuktionen:

    Copy:
    Code:
    void MyMainWindow::copy(void)
    {
    	_text = "";
    	_text.reserve(20000);
    	for (int i = 0; i <= _ptable->numCols(); i++)
    		{
    		for (int j = 0; j <= _ptable->numRows(); j++)
    			{				
    			if (_ptable->isSelected(j,i) == TRUE)
    			{
    			_text = _text +  _ptable->text(j,i) + ";";
    			}
    					
    			}
    			if (_text == "")
    				continue;
    			else _text = _text + "/";
    		}
    	_text.sqeeze();
    	_label5->setText(_text);
    }


    Paste:
    Code:
    void MyMainWindow::paste ( void )
    {
    	int status = 0;
    
    	for (int i = _ptable->currentColumn(); i <= _ptable->numCols(); i++)
    		{
    	for (int j = _ptable->currentRow(); j <= _ptable->numRows(); j++)
    			{
    			for ( int x = status; x <= _text.capacity(); x++ )
    				{
    				 _ch[x] = _text.at(x);
    				 if (_ch[x] == ";" || _ch[x] == "/")
    					{
    					status++;
    //					status= x;
    					break;
    					}
    				 
    				_text1 = _text1 + _ch[x];
    				
    				status= x;
    				}
    			if (_ch[x] == "/")
    				{
    				status--;
    				break;
    				}	
    			status++;
    		_ptable->setText( j,   i, _text1);
    		_text1 = "";
    			}
    		 status++;
    		}
    
    }
    Ich weiß ich geh euch ganz schön aufn Sack damit, aber ich steh noch ziemlich am Anfang was die Programmierung angeht.
    Danke für eure Hilfe und Geduld.

    MFG gyros
    Geändert von gyros'nmaronen (05-05-2006 um 11:50 Uhr)

  2. #2
    Registrierter Benutzer
    Registriert seit
    20.04.2006
    Beiträge
    29
    Hab meine paste-Funktion noch ein wenig verbessert.
    In eine Zelle kopiert er aber immer noch irgendwelche Striche.
    Wenn ich mehrere Zellen kopieren will stürzt mein Programm immer noch ab.
    Code:
    void MyMainWindow::paste ( void )
    {
    	int status = 0;
    
    	for (int i = _ptable->currentColumn(); i <= _ptable->numCols(); i++)
    		{
    		if ( i >= _ptable->numCols())
    			break;
    	  for (int j = _ptable->currentRow(); j <= _ptable->numRows(); j++)
    			{
    			for ( int x = status; x <= _text.capacity(); x++ )
    				{
    				 _ch[x] = _text.at(x);
    				 if (_ch[x] == ";" || _ch[x] == "/")
    					break;
    					
    				_text1 = _text1 + _ch[x];
    				status= x;
    				_ptable->setText( j, i, _text1);
    				}
    			if (_ch[x] == "/")
    				{
    				status++;
    				break;
    				}	
    			_text1 = "";
    			x++;
    			status= x;
    			}
    		 
    		}
    
    }

  3. #3
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Am Besten du trennst den String mit QStringList::split zuerst mal nach Zeilen.

    Dann in einer Schleife über diese Liste und parallel über die Rows.
    Bei jedem Element der Liste diesen String nach Spalten splitten, dann diese Unterliste parallel zu den Spalten iterieren.

    Übrigens würde ich an deiner Stelle als Zeilentrenner "\n" nehmen, also Newline.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  4. #4
    Registrierter Benutzer
    Registriert seit
    20.04.2006
    Beiträge
    29
    Hab dann doch noch den Algorithmus so optimiert das er jetzt funktionier. Habe aber kein String::List benutzt. Es funktioniert auch mit einem ganz normalen String. Aber mit der String::List wäre es natürlich eine elegantere Lösung. Newline hab ich auch noch eingefügt. Funktioniert tadellos!!! Übrigens kann ich jetzt auch in und von anderen Applikationen copy/pasten. Ist wirklich n'geiles Forum. Kann man nur weiter empfehlen. Danke...

    MFG gyros

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •