Читать книгу 📗 "Основы программирования в Linux - Мэтью Нейл"
Для задания политики вызовите метод
InsertionPolicyQComboBoxcombo->setInsertionPolicy(QComboBox::AtTop);Давайте бросим взгляд на конструкторы и методы выбора варианта виджета
QComboBox<b>#include <qcombobox.h></b><b>QComboBox(QWidget *parent = 0, const char *name = 0);</b><b>QComboBox(bool readwrite, QWidget *parent = 0, const char *name = 0);</b><b>int count();</b><b>void insertStringList(const QStringList& list, int index = -1);</b><b>void insertStrList(const QStrList& list, int index = -1);</b><b>void insertStrList(const QStrList *list, int index = -1);</b><b>void insertStrList (const char **strings, int numStrings = -1, int index = -1);</b><b>void insertItem(const QString &t, int index = -1);</b><b>void removeItem(int index);</b><b>virtual void setCurrentItem(int index);</b><b>QString currentText();</b><b>virtual void setCurrentText(const QString &);</b><b>void setEditable(bool);</b>Функция
countQStringListQStrListcurrentTextsetCurrentTextsetEditableQComboBoxtextChanged(QString&)Выполните упражнение 17.6.
Упражнение 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Как и в других содержащих текст виджетах, можно задать функцию, которая будет вызываться каждый раз при изменении значения или в общем случае текста раскрывающегося списка.