Чтение онлайн

на главную - закладки

Жанры

Основы программирования в Linux
Шрифт:

Гораздо чаще вы будете вставлять несколько элементов списка одновременно, для этого можно применить класс

QStrList
или, как показано далее, массив
char*
:

char* weather[] = {"Thunder", "Lightning", "Rain", 0};

combo->insertStrList(weather, 3);

И снова вы можете задать номер позиции вставляемых в список элементов.

Если в виджете

QComboBox
задан режим "чтение/запись", вводимые пользователем варианты могут автоматически вставляться в список. Это очень полезное, экономящее время свойство, избавляющее пользователя от повторного набора варианта, если он хочет уже введенный вариант использовать несколько раз.

Метод

InsertionPolicy
управляет позицией вводимого в список элемента. Вы можете выбрать одно из значений, приведенных в табл. 17.4.

Таблица 17.4

Значение Действие
QComboBox::AtTop
Вставляет вводимый в список элемент первым
QComboBox::AtBottom
Вставляет вводимый в список элемент последним
QComboBox::AtCurrent
Заменяет предварительно выбранный вариант в списке
QComboBox::BeforeCurrent
Вставляет вводимый элемент перед предварительно выбранным вариантом из списка
QComboBox::AfterCurrent
Вставляет вводимый элемент после предварительно выбранного варианта из списка
QComboBox::NoInsertion
Новый элемент не вставляется в список вариантов

Для задания политики вызовите метод

InsertionPolicy
виджета
QComboBox
:

combo->setInsertionPolicy(QComboBox::AtTop);

Давайте бросим взгляд на конструкторы и методы выбора варианта виджета

QComboBox
:

#include <qcombobox.h>

QComboBox(QWidget *parent = 0, const char *name = 0);

QComboBox(bool readwrite, QWidget *parent = 0, const char *name = 0);

int count;

void insertStringList(const QStringList& list, int index = -1);

void insertStrList(const QStrList& list, int index = -1);

void insertStrList(const QStrList *list, int index = -1);

void insertStrList (const char **strings, int numStrings = -1, int index = -1);

void insertItem(const QString &t, int index = -1);

void removeItem(int index);

virtual void setCurrentItem(int index);

QString currentText;

virtual void setCurrentText(const QString &);

void setEditable(bool);

Функция

count
возвращает количество вариантов в списке.
QStringList
и
QStrList
классы коллекций, которые можно применять для вставки вариантов. Удалить варианты можно с помощью метода removeItem, извлечь и задать текущий вариант можно, с помощью методов
currentText
и
setCurrentText
, а перейти в редактируемый режим — с помощью метода
setEditable
.

QComboBox
порождает сигнал
textChanged(QString&)
при каждом новом выборе варианта, передавая вновь выбранный элемент как аргумент.

Выполните упражнение 17.6.

Упражнение 17.6. Виджет
QComboBox

В этом примере вы сделаете попытку применить виджет

QComboBox
и посмотрите, как ведут себя сигналы и слоты с параметрами. Вы создадите класс
ComboBox
, потомка
QMainWindow
. В нем будут два виджета
QComboBox
: один для чтения/записи, другой только для чтения. Вы установите связь с сигналом
textChanged
для того, чтобы получать текущее значение при каждом его изменении.

1. Введите следующий программный код и назовите файл ComboBox.h:

#include <qmainwindow.h>

#include <qcombobox.h>

class ComboBox : public QMainWindow {

 Q_OBJECT

public:

 ComboBox(QWidget* parent = 0, const char *name = 0);

private slots:

 void Changed(const QString& s);

};

2. Интерфейс состоит из двух виджетов

QComboBox
: один редактируемый, а другой предназначен только для чтения. Вы заполните оба списка одними и теми же вариантами:

#include "ComboBox.moс"

#include <qlayout.h>

#include <iostream>

ComboBox::ComboBox(QWidget *parent, const char *name) :

 QMainWindow(parent, name) {

 QWidget *widget = new QWidget(this);

 setCentralWidget(widget);

 QVBoxLayout *vbox = new QVBoxLayout(widget, 5, 10, "vbox");

 QComboBox *editablecombo = new QComboBox(TRUE, widget, "editable");

 vbox->addWidget(editablecombo);

 QComboBox *readonlycombo = new QComboBox(FALSE, widget, "readonly");

 vbox->addWidget(readonlycombo);

 static const char* items[] = {"Macbeth", "Twelfth Night", "Othello", 0};

 editablecombo->insertStrList(items);

 readonlycombo->insertStrList(items);

 connect(editablecombo, SIGNAL(textchanged(const QString&),

this, SLOT(Changed(const QString&)));

 resize(350, 200);

}

3. Далее приведена функция слота. Обратите внимание на параметр

s
типа
QString
, передаваемый сигналом:

void ComboBox::Changed(const QString& s) {

Поделиться:
Популярные книги

Кодекс Охотника. Книга XXVII

Винокуров Юрий
27. Кодекс Охотника
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XXVII

Эпоха Опустошителя. Том V

Павлов Вел
5. Вечное Ристалище
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Эпоха Опустошителя. Том V

Дважды одаренный. Том VIII

Тарс Элиан
8. Дважды одаренный
Фантастика:
боевая фантастика
альтернативная история
аниме
попаданцы
5.00
рейтинг книги
Дважды одаренный. Том VIII

Воин-Врач

Дмитриев Олег
1. Воин-Врач
Фантастика:
попаданцы
альтернативная история
историческое фэнтези
6.00
рейтинг книги
Воин-Врач

Первый среди равных. Книга VI

Бор Жорж
6. Первый среди Равных
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Первый среди равных. Книга VI

Кодекс Крови. Книга VI

Борзых М.
6. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга VI

На границе империй. Том 5

INDIGO
5. Фортуна дама переменчивая
Фантастика:
боевая фантастика
попаданцы
7.50
рейтинг книги
На границе империй. Том 5

Личный аптекарь императора. Том 5

Карелин Сергей Витальевич
5. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
сказочная фантастика
фэнтези
7.50
рейтинг книги
Личный аптекарь императора. Том 5

Закрытые Миры

Муравьёв Константин Николаевич
Вселенная EVE Online
Фантастика:
фэнтези
5.86
рейтинг книги
Закрытые Миры

Кодекс Охотника. Книга VIII

Винокуров Юрий
8. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга VIII

Журнал «Если», 2002 № 08

Андерсон Кевин Джей
114. Журнал Если
Фантастика:
научная фантастика
5.00
рейтинг книги
Журнал «Если», 2002 № 08

Законы Рода. Том 9

Мельник Андрей
9. Граф Берестьев
Фантастика:
городское фэнтези
попаданцы
аниме
дорама
фэнтези
фантастика: прочее
5.00
рейтинг книги
Законы Рода. Том 9

Черный Маг Императора 17

Герда Александр
17. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Черный Маг Императора 17

Ученик

Первухин Андрей Евгеньевич
1. Ученик
Фантастика:
фэнтези
6.20
рейтинг книги
Ученик