При создании виджета QComboBoxможно указать, открыт ли он для чтения и записи или только для чтения, задавая логическое значение в конструкторе:
QComboBox *combo = new QComboBox(TRUE, parent, "widgetname");
Передача значения TRUEпереводит QComboBoxв режим "чтение/запись". Остальные параметры — обычный указатель на родительский виджет и имя создаваемого виджета.
Как все виджеты Qt, QComboBoxобладает гибкостью и предлагает широкий набор функциональных возможностей.
Вы можете добавлять варианты по одному или набором, как тип QStringили в стандартном формате char*.
Для вставки одного варианта вызовите функцию insertItem:
combo->insertItem(QString("An Item"), 1);
Приведенная функция принимает объект типа QStringи номер позиции в списке. В данном случае 1 вставляет вариант в список первым.
Для добавления в конец списка задайте любое отрицательное целое число.
Гораздо чаще вы будете вставлять несколько элементов списка одновременно, для этого можно применить класс 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(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
#include
class ComboBox : public QMainWindow {
Q_OBJECT
public:
ComboBox(QWidget* parent = 0, const char *name = 0);
private slots:
void Changed(const QString& s);
};
2. Интерфейс состоит из двух виджетов QComboBox: один редактируемый, а другой предназначен только для чтения. Вы заполните оба списка одними и теми же вариантами:
Читать дальше