QListWidget und Wordwrap/Zeilenumbruch

Alles rund um die Programmierung mit Qt
Antworten
Antis_81
Beiträge: 12
Registriert: 24. Mai 2007 13:19

QListWidget und Wordwrap/Zeilenumbruch

Beitrag von Antis_81 »

Hallo,
ich will einen QString als Element an ein QListwidget anhängen.

Der String enthält Zeilenumbrüche, was bei QListwidget dazu führt, dass der Eintrag ebenfalls in Umgebrochener Form erscheint (als ein zusammenhängendes Element).

Die Eigenschaften "Wordwrap" und "isWrapping" sind beide "false".

Gibt es eine Möglichkeit, den String in einer Zeile darzustellen?
RD1978
Beiträge: 84
Registriert: 5. Juni 2007 08:00
Wohnort: Stralsund (DDR)

Beitrag von RD1978 »

Hallo,

ersetz vor dem einfügen des QString doch alle Zeilenumbrüche mit Leerzeichen.

Code: Alles auswählen

deinString.replace( "\n", " " );
MfG RD1978
Antis_81
Beiträge: 12
Registriert: 24. Mai 2007 13:19

Beitrag von Antis_81 »

Das möchte ich vermeiden, da es Plattformübergreifend funktionieren muss.

Statt eines Umbruchs würde ich gern das entsprechende Steuerzeichen anzeigen.

Der String soll möglichst nicht verändert werden, sondern halt nur die Ausgabe.
RD1978
Beiträge: 84
Registriert: 5. Juni 2007 08:00
Wohnort: Stralsund (DDR)

Beitrag von RD1978 »

Hallo,

also wegen der Plattformunabhängigkeit würde ich dann Konstanten anlegen.

Code: Alles auswählen

//Beispiel
#ifdef Q_OS_LINUX
	#define NEW_LINE "\n"
#elif defined Q_OS_WIN32
	#define NEW_LINE "\r\n"
#else
	#error "Nichts definiert" // Kompiliervorgang abbrechen
#endif

// und dann halt einsetzen
deinString.replace( NEW_LINE, " " );
MfG RD1978
neuschi
Beiträge: 78
Registriert: 23. Mai 2007 10:59

Beitrag von neuschi »

Antis_81 hat geschrieben:Der String soll möglichst nicht verändert werden, sondern halt nur die Ausgabe.
Dann sind custom delegates bzw. Model/View die Stichworte.
Übersetze mal folgendes Programm. Die erste Spalte ist edittierbar, hier kannst du Zeilenumbrüche mit "\n" eingeben, die zweite Spalte zeigt dann den Text ohne Umbruch an.

Code: Alles auswählen

#include <QtGui>


class MyModel : public QAbstractTableModel
{
public:

	MyModel ( const QStringList &input, QObject * parent = 0 ) : QAbstractTableModel(parent)
	{
		m_strings = input;
	}	

	QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const 
	{
		if (role == Qt::DisplayRole || role == Qt::EditRole )
		{
			if (index.column() == 0)
				return m_strings.at(index.row() );
			else
			{
				QString res = m_strings.at(index.row());
				return res.replace(QRegExp("\\n"), "\\n");
			}
		}
		
		
		return QVariant();
	}
	
	int rowCount( const QModelIndex & )const
	{
		return m_strings.count();
	}
	int columnCount( const QModelIndex & ) const 
	{
		return 2;
	}
	Qt::ItemFlags flags ( const QModelIndex & index ) const   
	{
		if (index.column() == 1)
			return Qt::ItemIsSelectable | Qt::ItemIsEnabled;
		else
			return Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable;
	}
	bool setData ( const QModelIndex & index, const QVariant & value, int role = Qt::EditRole )  
	{
		QString res(value.toString());
		res.replace("\\n", "\n");
		m_strings.replace(index.row(), res);
		return true;
	}
private:

	QStringList m_strings;
};

int main(int argc, char *argv[])
{
	QApplication app(argc, argv);
	QStringList startStrings;
	
	startStrings << "Hallo \n ich bin zweizeilig" << "Ich nicht";
	MyModel *myMod = new MyModel(startStrings);
	
	QTableView *tv = new QTableView;
	tv->setModel(myMod);
	
	tv->show();
	
	
	return app.exec();
}
\Ralf
Antworten