ListviewsThis examples shows how to work with Listviews (hierarchical and multi-column). It also shows how to subclass Listview Items for special reasons. It looks and works like the mainwindow of a mail client. Header file: /**************************************************************************** ** $Id: //depot/qt/main/examples/listviews/listviews.h#4 $ ** ** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. ** ** This file is part of an example program for Qt. This example ** program may be used, distributed and modified without limitation. ** *****************************************************************************/ #ifndef LISTVIEWS_H #define LISTVIEWS_H #include <qsplitter.h> #include <qstring.h> #include <qobject.h> #include <qdatetime.h> #include <qlist.h> #include <qlistview.h> class QListView; class QLabel; class QPainter; class QColorGroup; class QObjectList; class QPopupMenu; // ----------------------------------------------------------------- class MessageHeader { public: MessageHeader( const QString &_sender, const QString &_subject, const QDateTime &_datetime ) : msender( _sender ), msubject( _subject ), mdatetime( _datetime ) {} MessageHeader( const MessageHeader &mh ); MessageHeader &operator=( const MessageHeader &mh ); QString sender() { return msender; } QString subject() { return msubject; } QDateTime datetime() { return mdatetime; } protected: QString msender, msubject; QDateTime mdatetime; }; // ----------------------------------------------------------------- class Message { public: enum State { Read = 0, Unread}; Message( const MessageHeader &mh, const QString &_body ) : mheader( mh ), mbody( _body ), mstate( Unread ) {} Message( const Message &m ) : mheader( m.mheader ), mbody( m.mbody ), mstate( m.mstate ) {} MessageHeader header() { return mheader; } QString body() { return mbody; } void setState( const State &s ) { mstate = s; } State state() { return mstate; } protected: MessageHeader mheader; QString mbody; State mstate; }; // ----------------------------------------------------------------- class Folder : public QObject { Q_OBJECT public: Folder( Folder *parent, const QString &name ); ~Folder() {} void addMessage( Message *m ) { lstMessages.append( m ); } QString folderName() { return fName; } Message *firstMessage() { return lstMessages.first(); } Message *nextMessage() { return lstMessages.next(); } protected: QString fName; QList<Message> lstMessages; }; // ----------------------------------------------------------------- class FolderListItem : public QListViewItem { public: FolderListItem( QListView *parent, Folder *f ); FolderListItem( FolderListItem *parent, Folder *f ); void insertSubFolders( const QObjectList *lst ); Folder *folder() { return myFolder; } protected: Folder *myFolder; }; // ----------------------------------------------------------------- class MessageListItem : public QListViewItem { public: MessageListItem( QListView *parent, Message *m ); virtual void paintCell( QPainter *p, const QColorGroup &cg, int column, int width, int alignment ); Message *message() { return myMessage; } protected: Message *myMessage; }; // ----------------------------------------------------------------- class ListViews : public QSplitter { Q_OBJECT public: ListViews( QWidget *parent = 0, const char *name = 0 ); ~ListViews() {} protected: void initFolders(); void initFolder( Folder *folder, unsigned int &count ); void setupFolders(); QListView *messages, *folders; QLabel *message; QPopupMenu* menu; QList<Folder> lstFolders; protected slots: void slotFolderChanged( QListViewItem* ); void slotMessageChanged(); void slotRMB( QListViewItem*, const QPoint &, int ); }; #endif Implementation: /**************************************************************************** ** $Id: //depot/qt/main/examples/listviews/listviews.cpp#9 $ ** ** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. ** ** This file is part of an example program for Qt. This example ** program may be used, distributed and modified without limitation. ** *****************************************************************************/ #include "listviews.h" #include <qlabel.h> #include <qpainter.h> #include <qpalette.h> #include <qobjectlist.h> #include <qpopupmenu.h> #include <qheader.h> #include <qregexp.h> // ----------------------------------------------------------------- MessageHeader::MessageHeader( const MessageHeader &mh ) { msender = mh.msender; msubject = mh.msubject; mdatetime = mh.mdatetime; } MessageHeader &MessageHeader::operator=( const MessageHeader &mh ) { msender = mh.msender; msubject = mh.msubject; mdatetime = mh.mdatetime; return *this; } // ----------------------------------------------------------------- Folder::Folder( Folder *parent, const QString &name ) : QObject( parent, name ), fName( name ) { lstMessages.setAutoDelete( TRUE ); } // ----------------------------------------------------------------- FolderListItem::FolderListItem( QListView *parent, Folder *f ) : QListViewItem( parent ) { myFolder = f; setText( 0, f->folderName() ); if ( myFolder->children() ) insertSubFolders( myFolder->children() ); } FolderListItem::FolderListItem( FolderListItem *parent, Folder *f ) : QListViewItem( parent ) { myFolder = f; setText( 0, f->folderName() ); if ( myFolder->children() ) insertSubFolders( myFolder->children() ); } void Main: /**************************************************************************** ** $Id: //depot/qt/main/examples/listviews/main.cpp#1 $ ** ** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. ** ** This file is part of an example program for Qt. This example ** program may be used, distributed and modified without limitation. ** *****************************************************************************/ #include "listviews.h" #include < |
Cette page est une traduction d'une page de la documentation de Qt, écrite par Nokia Corporation and/or its subsidiary(-ies). Les éventuels problèmes résultant d'une mauvaise traduction ne sont pas imputables à Nokia. | Qt 2.3 | |
Copyright © 2012 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon, vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD. | ||
Vous avez déniché une erreur ? Un bug ? Une redirection cassée ? Ou tout autre problème, quel qu'il soit ? Ou bien vous désirez participer à ce projet de traduction ? N'hésitez pas à nous contacter ou par MP ! |
Copyright © 2000-2012 - www.developpez.com