Виджеты в фреймворке Qt | Softodom - Блог о программировании, софте, интернете и IT
Опубликовано: 02.09.2018
Qt является очень популярным фреймворком на C++ для создания оконных приложений и поэтому обделять его вниманием не стоит. Как же он устроен? Он довольно прост и лаконичен. Всё визуальные элементы на форме в Qt являются виджетами (widget). Как же их создавать в программном коде, добавлять на форму и связывать с действиями? Посмотрим на примерах.
Виджеты в Qt являются полностью независимыми элементами, т.е. их можно показывать сразу после создания даже не добавляя на форму (окно) и они сами создадут для себя окно.
Для тренировки писать код виджетов будем прямо в функции main, которая в простом виде в оконном приложении Qt с главным окном выглядит так:
Qt-тренинг для разработчиков. День третий. Часть 1
int main(int argc, char *argv[]) { QApplication a(argc, argv); // create Qt app MainWindow w; // create Qt window // there your main code w.show(); // show Qt window return a.exec(); // execute Qt app }
В области “there your main code” пишем свой код создания виджетов.
Динамическое (в куче) создание виджета типа label, задание ему текста и показывание:
07 - Sailfish OS. Разработка компонентов приложений на языке C++
QLabel *label1 = new QLabel(); label1->setText("some"); label1->show();
Статическое (на стеке) создание виджета типа label, присвоение ему текста (передача строки в конструктор) и отображение:
QLabel lbl("Hello world"); lbl.show();У каждого виджета есть свой набор действий/событий, которые в Qt называются сигналами в то время как слушатели событий называются слотами. Сигналы и слоты связываются при помощи метода connect класса QObject.
Динамическое создание кнопки, отображение и связывание её сигнала “клик” со слотом (действием) “выход”:
QPushButton *pb = new QPushButton("close"); pb->show(); QObject::connect(pb, SIGNAL(clicked()), &a, SLOT(quit()));Динамическое создание спинбокса и слайдера:
QSpinBox *sb = new QSpinBox; QSlider *sl = new QSlider(Qt::Horizontal);У каждого типа виджета есть свои уникальные свойства помимо общих свойств (размер, положение, etc).
Установка созданным виджетам максимально возможных значений:
sb->setMaximum(100); sl->setMaximum(100);Связывание сигнала изменения со слотом в котором устанавливается значение другого элемента:
QObject::connect(sb, SIGNAL(valueChanged(int)), sl, SLOT(setValue(int))); QObject::connect(sl, SIGNAL(valueChanged(int)), sb, SLOT(setValue(int)));Так же как и в Java в Qt есть различные слои размещения (лэйауты) для более лёгкого размещения элементов на форме и для их автоматического позиционирования при изменении размеров формы.
Динамическое создание окна и слоя размещения (лэйаута):
QWidget *window = new QWidget; QHBoxLayout *layout = new QHBoxLayout;Добавление предыдущих виджетов в созданный лэйаут:
layout->addWidget(sb); layout->addWidget(sl);Добавление лэйаута в окно и показ окна:
window->setLayout(layout); window->show();Как видно, создавать виджеты, лэйауты и окна (формы) в Qt совсем не сложно.
Похожие посты coded by nessusСегодня | Завтра | ||
USD | 32.62 | 32.50 | |
EUR | 39.90 | 39.92 |
Обменник | Переходов |
Wmchanger | 6 |
E-Market | 5 |
WMtoCash.com | 4 |
Str-Money | 3 |
Hot-Change | 3 |
Вы можете получить WMR-бонус в размере 0,01-0,10 WMR на свой кошелек 1 раз в сутки | |
Кошелек
|
|
Код
|
|
Обмен Webmoney |