Основы программирования в Linux - Страница 309
Для задания политики вызовите метод
InsertionPolicyQComboBoxcombo->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);Функция
countQStringListQStrListcurrentTextsetCurrentTextsetEditableQComboBoxtextChanged(QString&)Выполните упражнение 17.6.
QComboBoxВ этом примере вы сделаете попытку применить виджет
QComboBoxComboBoxQMainWindowQComboBoxtextChanged1. Введите следующий программный код и назовите файл ComboBox.h:
#include <qmainwindow.h>#include <qcombobox.h>class ComboBox : public QMainWindow { Q_OBJECTpublic: 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. Далее приведена функция слота. Обратите внимание на параметр
sQStringvoid 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
Как это работает
Создаются виджеты раскрывающегося списка во многом так же, как и другие виджеты. Главная новая деталь — вызов функции
insertStrListКак и в других содержащих текст виджетах, можно задать функцию, которая будет вызываться каждый раз при изменении значения или в общем случае текста раскрывающегося списка.