Qt - kontrolka QListWidget

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 2422 razy

Kontrolka QListWidget umożliwia wyświetlanie listy elementów w jednej kolumnie z możliwością klikania, zaznaczania, dodawania i edytowanie dodanych do niej elementów. W celu pokazania podstawowych najczęściej stosowanych operacji stworzyłem projekt z graficznym interfejsem użytkownika pokazanym na poniższym rysunku.

Qt Creator - przykładowe GUI wykorzystujące kontrolkę QListWidget
Rys. 1
Qt Creator - przykładowe GUI wykorzystujące kontrolkę QListWidget

Użyte powyżej kontrolki to:

Kod programu w pliku mainwindow.h:

#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QMessageBox> #include <QListWidgetItem> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void on_addCountry_clicked(); // slot pod sygnał kliknięcia przycisku dodania kraju do QListWiew void on_channgeSelectedCountry_clicked(); // slot pod sygnał kliknięcia przycisku zmiany nazwy zaznaczonego kraju void on_removeSelectedCountry_clicked(); // slot pod sygnał kliknięcia przycisku usunięcia zaznaczonego kraju z QLitstView void on_sortList_clicked(); // slot pod sygnał kliknięcia przycisku sortowania listy krajów void on_countriesList_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous); // slot pod sygnał zmiany zaznaczonego elementu w kontrolce QListWidget private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H

W pliku mainwindow.h:

#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); ui->countriesList->addItems( {"Polska", "Czechy", "Słowacja"}); // dodawanie całej serii elementów do kontrolki QListWidget ui->countriesList->setSelectionMode(QAbstractItemView::SingleSelection); // ustawienie trybu zaznaczania na możliwość zaznaczania pojedynczej pozycji } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_addCountry_clicked() { if(ui->country->text().length()){ if(!ui->countriesList->findItems(ui->country->text(), Qt::MatchExactly).length()){ // sprawdzenie, czy pozycja już istnieje na liście ui->countriesList->addItem(ui->country->text()); // dodawanie elementu }else{ QMessageBox::warning(this, "Błąd!", "Ten kraj już jest na liście"); } }else{ QMessageBox::warning(this, "Błąd!", "Nie podano nazwy kraju"); } } void MainWindow::on_channgeSelectedCountry_clicked() { if(ui->country->text().length()){ // jeżeli kontrolka QLineText zawiera jakiś tekst to if(!ui->countriesList->findItems(ui->country->text(), Qt::MatchExactly).length()){ // sprawdzenie, czy pozycja już istnieje na liście QList<QListWidgetItem*> items = ui->countriesList->selectedItems(); // pobieranie listy zaznaczonych elementów if(items.length() == 1){ // jeżeli zaznaczony został element to items[0]->setText(ui->country->text()); // zmieniaj tekst w nim zawarty }else{ QMessageBox::warning(this, "Błąd!", "Nie zaznaczono kraju do zmiany nazwy"); } }else{ QMessageBox::warning(this, "Błąd!", "Nie można zmienić nazwy kraju, gdyż taki już istnieje"); } }else{ QMessageBox::warning(this, "Błąd!", "Nie podano nazwy kraju"); } } void MainWindow::on_removeSelectedCountry_clicked() { QList<QListWidgetItem*> items = ui->countriesList->selectedItems(); // pobieram listę zaznaczonych elementów if(items.length() == 1){ // jeżeli zaznaczono jeden element to delete ui->countriesList->takeItem(ui->countriesList->row(items[0])); // usuwam go z listy }else{ QMessageBox::warning(this, "Błąd!", "Nie zaznaczono kraju do usunięcia"); } } void MainWindow::on_sortList_clicked() { ui->countriesList->sortItems(); // sortowanie listy } void MainWindow::on_countriesList_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous) { ui->country->setText(current->text()); // ustawienie tekstu wyświetlanego w kontrolce QLineEdit na ten z zaznaczonego elementu kontrolki QListWidget }
Strony powiązane
strony powiązane
  1. doc.qt.io/qt-4.8/qlistwidget.html - opis klasy QListWidget na stronie dokumentacji Qt