Шаг 75.
Библиотека Qt.
Класс QListWidget. Выбор элементов пользователем

    На этом шаге рассмотрим выбор элементов пользователем в виджете класса QListWidget.

    Узнать, какой элемент выбрал пользователь, можно с помощью метода QListWidget::currentItem(), который возвращает указатель на выбранный элемент. Если же выбранных элементов несколько, то нужно вызвать метод selectedItems(), который вернет список выбранных элементов. Чтобы разрешить режим множественного выделения, необходимо установить при помощи метода setSelectionMode(), реализованного в базовом классе QAbstractItemView, значение QAbstractItemView::MultiSelection. В этот метод можно передавать и другие значения, например, для того чтобы запретить выделение вовсе, в него нужно передать QAbstractItemView::NoSelection, а для возможности выделения только одного из элементов — QAbstractItem::SingleSelection.

    После щелчка на элементе списка отправляется сигнал itemClicked(). При двойном щелчке мыши на элементе отправляется сигнал itemDoubleClicked() с параметром QListWidgetItem*. После каждого изменения выделения элементов отсылается сигнал itemSelectionChanged().

    На рис. 1 показан пример использования сигнала itemClicked() - при выборе элемента списка в надписи отображается его текст.


Рис.1. Пример использования слота itemClicked()

    Для реализации данного приложения описали класс lw:

class lw:public QWidget
{
    Q_OBJECT
private:
    //переменные
    QStringList lst;//список строк
    QListWidget *lwg;//виджет списка
    QLabel *l;//виджет надписи
    QListWidgetItem* pitem,*t;//элемент списка
public:
    lw(QWidget *parent=0);//конструкторы
private slots:
    void vivod();//функция-слот
};

    Конструктор реализован следующим образом (приведем только фрагмент заполнения элементов списка):

//создаем объект класса QListWidget
lwg=new QListWidget(this);
//создаем объект класса QLabel
l=new QLabel("Вы выбрали: ");
pitem = 0;
//задаем размер для растровых изображений элементов
lwg->setIconSize(QSize(50, 50));
//список строк заполняется надписями для элементов
lst << "Android" << "Linux" << "Windows" << "MacOSX" << "MSDOS";
int i=0;
//создаем и добавляем элементы в список
foreach(QString str, lst)
{
    pitem = new QListWidgetItem(str, lwg);
    pitem->setIcon(QPixmap(str + ".jpg"));
    if(i==0)
    {   //создаем указатель на первый элемент
        t=pitem;
        i++;
    }
}
//текущим элементом сделали первый элемент списка
lwg->setCurrentItem(t);
//к надписи добавляем текст текущего элемента списка
l->setText(l->text()+t->text());
//по щелчку на элементе списка вызывается слот vivod()
QObject::connect(lwg,SIGNAL(itemClicked(QListWidgetItem * )),
                 this,SLOT(vivod()));

    Функция vivod() формирует новую надпись:

//указатель на текущий элемент
t=lwg->currentItem();
l->setText("Вы выбрали: ");
l->setText(l->text()+t->text());

    Файлы приложения можно взять здесь.

    На следующем шаге продолжим знакомиться с классом QListWidget и рассмотрим изменение элементов пользователем.




Предыдущий шаг Содержание Следующий шаг