Verwendung von QListWidget und QListView und Elementklickereignis

QListWidget und QListView werden sehr häufig verwendet, aber sie haben ähnliche Funktionen und es ist oft leicht, den Unterschied zu erkennen, aber ich weiß nicht, wie ich wählen soll. Hier ist eine Zusammenfassung der Unterschiede und Verwendungsmöglichkeiten zwischen den beiden. Teilen Sie sie mit Bedürftigen und klicken Sie, um sie bei Bedarf zu sammeln.

Einführung in QListView

QListView ist ein Steuerelement zum Anzeigen von Listen in Qt. Es kann eine einspaltige Liste anzeigen und jedes Element kann ein Text, ein Bild oder ein benutzerdefiniertes QWidget-Objekt sein. QListView bietet eine umfangreiche Benutzeroberfläche. Sie können den Auswahlmodus, die Sortiermethode, die Bildlaufleiste und andere Eigenschaften der Liste festlegen sowie den Stil, die Größe, die Ausrichtung und andere Informationen des Elements festlegen. QListView kann auch Elemente verwalten, indem es die QAbstractItemModel-Klasse anpasst, um flexiblere Funktionen zu erreichen.
 Zu den allgemeinen Schnittstellen von QListView gehören:
 - setModel(): Legt das Modell von QListView fest.
- setSelectionMode(): Legt den Auswahlmodus der Liste fest.
- setSortingEnabled(): Legen Sie fest, ob die Sortierung aktiviert werden soll.
- setIconSize(): Legt die Symbolgröße des Elements fest.
- setViewMode(): Legt den Anzeigemodus der Liste fest.
- setSpacing(): Legt den Abstand zwischen Elementen fest.
- setUniformItemSizes(): Legt fest, ob eine einheitliche Elementgröße verwendet werden soll.
- setWordWrap(): Legt fest, ob automatisch umgebrochen werden soll.
- setHorizontalScrollBarPolicy() und setVerticalScrollBarPolicy(): Legen Sie die Anzeigerichtlinie für die Bildlaufleiste fest.
 Hier ist ein einfaches Beispiel, das zeigt, wie QListView zum Anzeigen einer einfachen Liste verwendet wird:

// 创建一个QStringListModel
QStringListModel* model = new QStringListModel();
model->setStringList({"Item 1", "Item 2", "Item 3"});
// 创建一个QListView,并设置model
QListView* listView = new QListView();
listView->setModel(model);
// 设置列表的选择模式为单选
listView->setSelectionMode(QAbstractItemView::SingleSelection);
// 设置列表的排序方式为升序
listView->setSortingEnabled(true);
// 设置item的图标大小为32x32
listView->setIconSize(QSize(32, 32));
// 设置item之间的间距为10
listView->setSpacing(10);
// 设置列表的显示模式为图标模式
listView->setViewMode(QListView::IconMode);
// 设置是否自动换行
listView->setWordWrap(true);
// 设置滚动条的显示策略
listView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
listView->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);

Erstellen Sie im obigen Code zunächst ein QStringListModel und legen Sie den Text der drei Elemente fest. Anschließend wurde eine QListView erstellt und das Modell als Modell festgelegt. Der Auswahlmodus der Liste ist auf Einzelauswahl eingestellt, die Sortiermethode ist aufsteigend, die Symbolgröße beträgt 32 x 32, der Abstand zwischen Elementen beträgt 10, der Anzeigemodus ist Symbolmodus, automatischer Zeilenumbruch, die Anzeigestrategie der Bildlaufleiste wird nicht horizontal angezeigt, sondern bei Bedarf vertikal angezeigt. Fügen Sie abschließend QListView zum Fenster hinzu, um die Liste anzuzeigen.

Einführung in QListWidget

Die QListWidget-Klasse stellt ein elementbasiertes Listen-Widget bereit. QListWidget ist eine praktische Klasse, die eine ähnliche Listenansicht wie QlistView bereitstellt, jedoch mit Funktionen zum Hinzufügen und Löschen. QListWidget verwendet ein internes Modell, um jedes QListWidgetItem in der Liste zu verwalten. Für eine flexiblere Listenansicht verwenden Sie die QListView-Klasse mit einem Standardmodell.

Der Unterschied zwischen QListWidget und QListView

Sowohl QListWidget als auch QListView sind Steuerelemente zum Anzeigen von Listen in Qt. Der Unterschied zwischen ihnen liegt hauptsächlich in der Anzeigemethode und der Verwendungsmethode. QListView basiert auf Model, während QListWidget auf Item basiert. Das ist ihr wesentlicher Unterschied.

QListWidget ist ein erweitertes Steuerelement, das auf QListView basiert und eine praktische Listenansicht bietet, in der Bilder, Text und andere benutzerdefinierte Inhalte angezeigt werden können. Jedes Element in QListWidget ist ein QListWidgetItem-Objekt. Sie können der Liste über die Funktion addItem() Elemente hinzufügen, über die Funktion setItemSelected() festlegen, ob das Element ausgewählt wird, und über die Funktion setSelectionMode() den Auswahlmodus der Liste festlegen .

QListView ist ein Steuerelement auf niedrigerer Ebene, das eine Ansicht zum Anzeigen einer Liste bereitstellt, jedoch keine Elementverwaltungsfunktionen bereitstellt. Jedes Element in QListView ist ein QModelIndex-Objekt und das Element kann über die Schnittstelle der QAbstractItemModel-Klasse verwaltet werden. Das Element in QListView kann ein beliebiges benutzerdefiniertes QWidget-Objekt sein, und das QWidget-Objekt kann über die Funktion setIndexWidget() als Anzeigeinhalt des Elements festgelegt werden.

QListWidget erbt QListView und QListView basiert auf dem Modell. Es muss sich selbst modellieren (z. B. QStringListModel, QSqlTableModel usw. erstellen) und Daten speichern, was die Datenredundanz erheblich reduziert und die Programmeffizienz verbessert. QListWidget ist eine aktualisierte Version von QListView. Es hat für uns ein Datenspeichermodell (QListWidgetItem) etabliert. Es ist einfach zu bedienen. Sie können Elemente (ICON, Text) hinzufügen, indem Sie addItem direkt aufrufen.

Das Folgende ist ein einfaches Anwendungsbeispiel, das zeigt, wie QListWidget und QListView zum Anzeigen einer einfachen Liste verwendet werden:

// 使用QListWidget显示一个简单的列表
QListWidget* listWidget = new QListWidget();
listWidget->addItem("Item 1");
listWidget->addItem("Item 2");
listWidget->addItem("Item 3");

// 使用QListView显示一个简单的列表
QStringListModel* model = new QStringListModel();
model->setStringList({"Item 1", "Item 2", "Item 3"});
QListView* listView = new QListView();
listView->setModel(model);

QListWidget verwendet

void MainWindow::initListView()
{

    ui->m_ListWidget->setViewMode(QListWidget::IconMode);//显示模式
    ui->m_ListWidget->setIconSize(QSize(220, 100));//设置图片大小
    ui->m_ListWidget->setSpacing(5);//间距
    ui->m_ListWidget->setResizeMode(QListView::Adjust);//适应布局调整
    ui->m_ListWidget->setMovement(QListView::Static);//不能移动
    ui->m_ListWidget->setFlow(QListWidget::TopToBottom);  //从上到下(横向布局)
    ui->m_ListWidget->setSortingEnabled(true);//自动排序

    QDir dir_(QCoreApplication::applicationDirPath() +"/image/");    //遍历子目录中所有文件
    dir_.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);        //获取当前所有文件
    dir_.setSorting(QDir::Size | QDir::Reversed);
    dir_.setNameFilters(QStringList("test*.png"));
    QFileInfoList list_file = dir_.entryInfoList();
    QImage* img=new QImage;
    for (int i = 0; i < list_file.size(); ++i) {
         QFileInfo fileInfo = list_file.at(i);
        qDebug()<<"fileInfos:"<<fileInfo.fileName();

        img->load(QCoreApplication::applicationDirPath() +"/image/"+fileInfo.fileName());
        QImage  image = img->scaled(QSize(220, 100),Qt::KeepAspectRatio, Qt::SmoothTransformation);
        QPixmap pixmap = QPixmap::fromImage(image);
        QListWidgetItem *imageItem = new QListWidgetItem;
        imageItem->setIcon(QIcon(pixmap));
        imageItem->setText(fileInfo.fileName());
        imageItem->setSizeHint(QSize(230, 115));
        imageItem->setTextAlignment(Qt::AlignCenter);
        // 连接item的clicked信号到槽函数,实现item的点击事件
        ui->m_ListWidget->addItem(imageItem);
    }

    connect(ui->m_ListWidget,&QListWidget::pressed,[=](QModelIndex pos){
        qDebug()<<"m_ListWidget pos.row:"<<pos.row();
    });

    //我们可以通过信号和槽的方式对列表控件的选项进行响应,例如
    connect(ui->m_ListWidget, SIGNAL(currentTextChanged(QString)),this, SLOT(textChanged(QString)));
}

QListView verwendet

void MainWindow::initListView1()
{
    listModel = new QStandardItemModel(this);
    ui->listView1->setIconSize(QSize(220, 100));
    for(int listRow=0; listRow< 5; listRow++) {
        QStandardItem* item = new QStandardItem(QString("Item %0").arg(listRow));

        QString filename = QCoreApplication::applicationDirPath() +"test.png";
        QImage* img=new QImage;
        img->load(QCoreApplication::applicationDirPath() +"/test.png");
        QImage  image = img->scaled(QSize(220, 100),Qt::KeepAspectRatio, Qt::SmoothTransformation);
        QPixmap pixmap = QPixmap::fromImage(image);
        item->setIcon(QIcon(pixmap));

        item->setSizeHint(QSize(230, 115));

        listModel->appendRow(item);
    }
    connect(ui->listView1,&QListView::pressed,[=](QModelIndex pos){
        qDebug()<<"listView pos.row:"<<pos.row();
    });

    ui->listView1->setModel(listModel);
}

andere Ressourcen

Verwendung von QTs QListWidget – Programmierer gesucht

Qt QListWidget Detaillierte Erklärung – Tencent Cloud Developer Community – Tencent Cloud

QListWidget-Verwendung (1): Element im Listenmodus hinzufügen_Qt Advanced Development Video Tutorial_C/C++ Video-51CTO School

QT verwendet QListWidget, um mehrere Bilder anzuzeigen_listwidget Bilder hinzufügen_Miaoweis Blog-CSDN-Blog

QT verwendet QListWidget, um das Bild list_qt picture list_Still Free People's Blog-CSDN-Blog zu realisieren

Fügen Sie Steuerelemente und Bilder zu Qt listView___Unhappy Blog hinzu – CSDN-Blog

https://ruikezhishiyun.blog.csdn.net/article/details/122683533

QListWidget fügt benutzerdefinierte Widgets hinzu und sorts_qlistwidget fügt automatisch widgets_bclshuais Blog-CSDN-Blog hinzu

QListWidget führt Zeilensortierungsfunktion aus_qt qlistwidget sorting_Pailugous Blog-CSDN-Blog

[QT_007] Detaillierte Erläuterung der QListWidget-Steuerung von Qt learning_Sky Castle 8020 Blog-CSDN Blog

QListWidget-Anordnungssteuerelemente in Qt

https://www.cnblogs.com/tony-yang-flutter/p/15979967.html

Die Elemente in QListWidget sind horizontal angeordnet_qlistwidget horizontal_Licht Xiaofans Blog-CSDN-Blog

Qts QListwiget legt die horizontale Anordnung fest_qt horizontale Liste control_liuxizhen2009s Blog-CSDN-Blog

QListWidget zeigt den Inhalt des Ordners an, wählt die Datei aus und zeigt die Bilder unter dem Ordner an

Die Verwendung von QListWidget und QTableWidget sowie die Stileinstellungen_qlistwidget-Stiltabelle_Ming Zhijis Blog-CSDN-Blog

Supongo que te gusta

Origin blog.csdn.net/qq8864/article/details/130986313
Recomendado
Clasificación