QListWidget durchsuchen



  • Hi,
    ich habe in meiner Oberfläche das QListWidget listWidget.
    Ich möchte jetzt eine Funktion anheangen schreiben, die einen neuen Eintrag der Liste hinzufügt,
    wenn er nicht bereits in der Liste ist.
    Hier in der Doku findet man dazu nur:
    QList<QListWidgetItem *> QListWidget::findItems(const QString &text, Qt::MatchFlags flags)
    Das Problem ist, dass hier auch eine Liste zurückgegeben wird.
    Würde die Methode findItems() keine Liste, sondern bool zurückgeben,
    habe ich mir gedacht, dass meine Funktion anhaengen() etwa so aussehen könnte:

    //wenn findItems() bool zurückgeben würde
    void MainWindow::anhaengen(QString neu)
    {
        if(ui->listWidget->findItems("neuerEintrag",Qt::MatchExactly))
        {
            ui->listWidget->addItem(neu);
        }
    }
    

    Das ist aber nicht der Fall und es scheint auch keine passende Suchfunktion zu geben,
    die bool zurückgibt.
    Vielleicht kann man den Rückgabetyp

    QList<QListWidgetItem*>
    

    so verwenden, dass er einen Eintrag aufspürt.
    Oder gibt es hier vielleicht doch eine passende Funktion, die bool zurückgibt?
    Eine zweite Liste lässt sich jedenfalls zum Beispiel so erzeugen:

    zweiteListe = ui->listWidget->findItems("ccc",Qt::MatchExactly);
    

    aber damit komme ich auch nicht weiter.



  • Lass dir die Liste zurückgeben und guck´ ob sie leer ist. Wenn sie leer ist gibt´s den Eintrag noch nicht und du kannst den neuen hinzufügen.



  • Wie kann ich prüfen ob die Liste leer ist?
    Wenn ich die zweite Liste erzeuge:

    QList<QListWidgetItem*> zweiteListe;
    

    und dann folgendes versuche bekomme ich eine Fehlermeldung:

    void MainWindow::anhaengen(QString neu)
    {
        neu = "ccc";
        zweiteListe = ui->listWidget->findItems("ccc",Qt::MatchExactly);
        if(zweiteListe == void)     //expected '(' for function-style cast or type construction
        {
            ui->listWidget->addItem(neu);
        }
    
    }
    

    Ich weis auch nicht, ob das Argument Qt::MatchExactly in diesem Fall passend ist.
    Es erschien mir einfach logisch.



  • Ah, ok es geht mit:

    zweiteListe.isEmpty()
    


  • 🙂 🙂 🙂
    Super!
    Vielen Dank!!!

    So geht es:

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        resize(1000,1000);
        ui->listWidget->resize(800,800);
    
        ui->listWidget->addItem("aaa");
        ui->listWidget->addItem("bbb");
    
        MainWindow::anhaengen("aaa");
    }
    
    void MainWindow::anhaengen(QString neu)
    {
        zweiteListe = ui->listWidget->findItems(neu,Qt::MatchExactly);
        if(zweiteListe.isEmpty())
        {
            ui->listWidget->addItem(neu);
        }
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    

Log in to reply