Основы программирования в 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) {
Поделиться:
Популярные книги
Матабар III
3. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Идеальный мир для Лекаря 22
22. Лекарь
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Моров. Том 1 и Том 2
1. Моров
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Магнат
4. Подкидыш
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Убивать чтобы жить 2
2. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Мятежник
4. Стеллар
Фантастика:
боевая фантастика
7.39
рейтинг книги
Пушкарь. Пенталогия
Фантастика:
альтернативная история
8.11
рейтинг книги
На границе империй. Том 8. Часть 2
13. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Воевода
5. Помещик
Фантастика:
альтернативная история
5.00
рейтинг книги
Самодержец
5. Внук Петра
Фантастика:
попаданцы
альтернативная история
6.25
рейтинг книги
Точка Бифуркации III
3. ТБ
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин
1. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Цикл романов "Целитель". Компиляция. Книги 1-17
Целитель
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Дворянин
2. Император и трубочист
Фантастика:
боевая фантастика
альтернативная история
5.00