Seite 1 von 1

QListWidget - autom. AKTUALISIERUNG [gelöst]

Verfasst: 23. September 2011 22:34
von thc2_67
Hallo,

ich hab da mal ein Problem und hoffe hier auf Hilfe zu stossen.

Ziel: ich möchte in einem definierten QWidget eine Liste von Einträgen (sind defacto Files eines bestimmten Directories) mittels eines QListWidget's anzeigen. Das funktioniert mal soweit.
Jedoch kann ich in meiner Klasse weitere Einträge (Files) in meinem Directory erstellen, diese sollen dann automatisch im QListWidget wieder
dargestellt werden.
Das QListWidget ist eine eigene Klasse und wird mittels QMap, welches das Directory auslest, "gefüttert".

QListWidget / .h

Code: Alles auswählen

#include <QWidget>
#include <QMap>
#include <QListWidget>

class VereinList : public QWidget
{
    Q_OBJECT
public:
    VereinList(const QMap<int,QString> &symbolMap, QWidget *parent = 0);

    QListWidget *listWidget;

private:

    int id;

public slots:
    void curItem(QListWidgetItem * item);
};

#endif

QListWidget / .cpp

Code: Alles auswählen

#include <QVBoxLayout>

#include "vereinlist.h"

VereinList::VereinList(const QMap<int,QString> &vereinMap, QWidget *parent)

{
    id=-1;
    listWidget = new QListWidget;
    QMapIterator<int,QString> Verein(vereinMap);
    listWidget->sortItems(Qt::AscendingOrder);
    while (Verein.hasNext())
    {
        Verein.next();
        QListWidgetItem *item = new QListWidgetItem(Verein.value(),listWidget);
    }
    QVBoxLayout *layout = new QVBoxLayout;
    listWidget->setFrameStyle(QFrame::Box);
    listWidget->setFrameShadow(QFrame::Sunken);
    layout->addWidget(listWidget);
    setLayout(layout);

    connect (listWidget,SIGNAL(itemActivated(QListWidgetItem*)),this,SLOT(curItem(QListWidgetItem*)));
}

void VereinList::curItem(QListWidgetItem *item)
{
    if(!item) return;
    item->setBackground(QBrush(Qt::red));
    id = item->data(Qt::UserRole).toInt();
    QString verein = item->text();
}
Hier wird das QListWidget verwendet:

Code: Alles auswählen

#include <QFile>
#include <QString>
#include <QStringList>
#include <QMap>

#include "defines.h"

#include "team.h"
#include "ui_team.h"



Team::Team(QWidget *parent) :
    QStackedWidget(parent),
    ui(new Ui::Team)
{
    ui->setupUi(this);
    ui->f_mannschaft_frame->hide();
    ui->f_spieler_frame->hide();
    ui->f_verein_name->setEnabled(false);
    ui->f_add_verein_abbrechen->setEnabled(false);
    ui->f_add_verein_ok->setEnabled(false);

    verein_ListFill();

    t_vereinList = new VereinList(teamMap);
  
    ui->f_teamList_layout->addWidget(t_vereinList);

    connect (ui->f_add_verein,SIGNAL(clicked()),this,SLOT(slot_addVerein()));
    connect (ui->f_add_verein_ok,SIGNAL(clicked()),this,SLOT(slot_addVereinOK()));
    connect (ui->f_add_verein_abbrechen,SIGNAL(clicked()),this,SLOT(slot_addVereinAbbrechen()));

}

Team::~Team()
{
    delete ui;
}

void Team::slot_addVerein()
{
    ui->f_verein_name->setEnabled(true);
    ui->f_add_verein_abbrechen->setEnabled(true);
    ui->f_add_verein_ok->setEnabled(true);
}

void Team::slot_addVereinOK()
{
    if(ui->f_verein_name->text().isEmpty()) return;
    t_team = new Config(TEAM_DIR + QString("/") + ui->f_verein_name->text());
    t_team->setValue(CFG_TEAM_LOGO,"");
    t_team->saveToFile();
    verein_ListFill();

}
void Team::slot_addVereinAbbrechen()
{
    ui->f_verein_name->setText("");
    ui->f_verein_name->setEnabled(false);
    ui->f_add_verein_abbrechen->setEnabled(false);
    ui->f_add_verein_ok->setEnabled(false);
}

void Team::verein_ListFill()
{
    teamMap.clear();
    QDir team_dir(QDir::current().absolutePath() + QString("/") + TEAM_DIR);
    QStringList dirList = team_dir.entryList(QDir::Files);
    for(int i=0;i<dirList.size();i++)
    {
        teamMap.insert(i, dirList.at(i).toLocal8Bit().constData());
    }
}
Das QListWidget sollte nach der Aktuakiserung der QMap (das geht auch!) auch aktualisiert werden, nur das krieg ich leider nicht hin.

Danke für Eure Hinweise.

Re: QListWidget - autom. AKTUALISIERUNG

Verfasst: 23. September 2011 22:46
von upsala
Und warum nimmst du keine QListView und ein QFileSystemModel?