КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Сигналы и слоты
Введение Сигналы и слоты в Qt Сигналы и слоты используются для коммуникации между объектами. Механизм сигналов и слотов главная особенность Qt и вероятно та часть, которая отличаетcя от особенностей, предоставляемых другими фреймворками.
Механизм сигналов и слотов типобезопасен. Сигнатура сигнала должна совпадать с сигнатурой слота-получателя. (Фактически слот может иметь более короткую сигнатуру чем сигнал который он получает, так как он может игнорировать дополнительные аргументы). Так как сигнатуры сравнимы, компилятор может помочь нам обнаружить несовпадение типов. Сигналы и слоты слабо связаны. Класс, который вырабатывает сигнал не знает и не заботится о том, какие слоты его получат. Механизм сигналов и слотов Qt гарантирует, что если мы подключим сигнал к слоту, слот будет вызван с параметрами сигнала в нужное время. Сигналы и слоты могут принимать любое число аргументов любого типа. Они полностью типобезопасны. Пример 4.Простой сигнало-слотный. Рассмотрим простой пример, являющийся некоторой переработкой стандартного «Hello, World!» направленный на ознакомление с сигналами-слотами и так же некоторыми возможностями Qt. Qt предоставляет возможность реализовывать построение графического пользовательского интерфейса не только привычным нам способом с помощью средств визуального проектирования, но и вручную. Конечно, использование средств визуального проектирования позволяет получить результат значительно быстрее, но всё же стоит знать о существовании иных возможностей. Данное приложение состоит из нескольких виджетов: QWidget, QLabel, QPushButton, QSpinBox, QSlider. QWidget является главным окном приложения. Все виджеты помещены внутрь QWidget, и является дочерними по отношению к нему. 1. int main(int argc, char *argv[]) 2. { 3. QApplication app(argc, argv); 4. QWidget *window = new QWidget; 5. window->setWindowTitle("Example"); 6. QLabel *label = new QLabel("<h2><i>Hello<i>" "<font color=red> Student!</h2></font>");
В строке 6 мы описываем новый label, который будет содержать нужную нам информацию. Как можно заметить, можно пользоваться простыми средствами форматирования документов HTML
7. QPushButton *button = new QPushButton("Quit"); 8. QObject::connect(button, SIGNAL(clicked()), 9. &app, SLOT(quit())); 10.QSpinBox *spinBox = new QSpinBox; 11.QSlider *slider = new QSlider(Qt::Horizontal); 12.spinBox->setRange(0, 100); 13.slider->setRange(0, 100);
Мы объявляем два виджета, наборный счетчик и ползунок. Именно их мы и соединим в последствии сигналом и слотом.
14.QObject::connect(spinBox, SIGNAL(valueChanged(int)), 15.slider, SLOT(setValue(int))); Вызов функции QObject::connect() обеспечивает синхронизацию их работы. Если один из виджетов изменит значение, то сгенерируется сигнал valueChanged(int) и вызовется слот setValue(int) другого виджета.
16.QObject::connect(slider, SIGNAL(valueChanged(int)), 17.spinBox, SLOT(setValue(int))); 18.spinBox->setValue(50);
Qt имеет в своём распоряжении Менеждер компоновки – это объект, который устанавливает размер и положение виджетов в зоне его действия. Их три – QHBoxLayout, QVBoxLayout, QGridLayout. Они позволяют не заморачиваться над положением и размером виджетов и знать,что они всё равно будут аккуратно расположены в ряд.
19.QHBoxLayout *layout1 = new QHBoxLayout; 20.layout1->addWidget(label); 21.layout1->addWidget(button); 22.QHBoxLayout *layout2 = new QHBoxLayout; 23.layout2->addWidget(spinBox); 24.layout2->addWidget(slider); 25.QVBoxLayout *vlayout = new QVBoxLayout; 26.vlayout->addLayout(layout1); 27.vlayout->addLayout(layout2); 28.window->setLayout(vlayout); 29.window->show(); 30.return app.exec(); 31. }
Дата добавления: 2014-01-05; Просмотров: 1177; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |