Читаем Основы программирования в Linux полностью

В этом примере вы сделаете попытку применить виджет 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

Как это работает

Создаются виджеты раскрывающегося списка во многом так же, как и другие виджеты. Главная новая деталь — вызов функции insertStrList для сохранения списка вариантов в виджете.

Как и в других содержащих текст виджетах, можно задать функцию, которая будет вызываться каждый раз при изменении значения или в общем случае текста раскрывающегося списка.

<p><emphasis>QListView</emphasis></p>

Списки и деревья в комплекте Qt формируются виджетом QListView. Этот виджет представляет как простые списки, так и иерархические данные, разделенные на строки и столбцы. Он очень подходит для вывода структур каталогов или чего-то подобного, потому что дочерние элементы можно раскрыть и свернуть, щелкнув кнопкой мыши знак "плюс" или "минус", так же как в файловом обозревателе.

В отличие от виджета GTK+ ListView виджет QListView обрабатывает и данные, и их представление, что сделано для облегчения использования, если не для исключительной гибкости.

В виджете QListView можно выбрать строки или отдельные ячейки и затем вырезать и вставить данные, отсортировать их по столбцу и вы получите виджеты QCheckBox, отображенные в ячейках. В этот виджет встроено множество функциональных возможностей — как программисту вам достаточно лишь вставить данные и задать некоторые правила форматирования.

Создается виджет QListView обычным образом, заданием родительского виджета и собственного имени виджета:

QListView *view = new QListView(parent, "name");

Для задания заголовков столбцов используйте соответствующим образом названный метод addColumn:

view->addColumn("Left Column", width1); // фиксированной ширины

view->addColumn("Right Column"); // с автоматически задаваемым размером

Перейти на страницу:

Похожие книги

Основы программирования в Linux
Основы программирования в Linux

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Нейл Мэтью , Ричард Стоунс , Татьяна Коротяева

ОС и Сети / Программирование / Книги по IT
1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT