Seite 1 von 1
QListWidget und Wordwrap/Zeilenumbruch
Verfasst: 1. August 2007 15:02
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?
Verfasst: 1. August 2007 17:38
von RD1978
Hallo,
ersetz vor dem einfügen des QString doch alle Zeilenumbrüche mit Leerzeichen.
MfG RD1978
Verfasst: 2. August 2007 10:40
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.
Verfasst: 2. August 2007 11:35
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
Verfasst: 2. August 2007 13:12
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