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.
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
: один редактируемый, а другой предназначен только для чтения. Вы заполните оба списка одними и теми же вариантами:
#include "ComboBox.moс"
#include
#include
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) {
std::cout << s << "\n";
}
int main(int argc, char **argv) {
QApplication app(argc, argv);
ComboBox* window = new ComboBox();
app.setMainWidget(window);
window->show();
return app.exec();
}
Вы сможете видеть вновь выбранные из редактируемого QComboBox
варианты в командной строке на рис. 17.6.
Рис. 17.6
Как это работает