Определение объема несжатого аудио-файла по данным: количеству каналов, глубине кодирования, частоте дискретизации и времени звучания.
- Постановка задачи
- Внешний вид приложения
- Файл widget.h
Написать приложение в окне которого используются группы (QGroupBox) переключателей QRadioButton, кнопки, однострочное текстовое поле ввода и метки, одна из которых используется для вывода результата. Для компоновки виджетов в окне использовать табличную (матричную) компоновку QGridLayout. Для форматирования вывода использовать разметку HTML.
#ifndef WIDGET_H #define WIDGET_H #include <QGroupBox> #include <QGridLayout> #include <QVBoxLayout> #include <QHBoxLayout> #include <QRadioButton> #include <QPushButton> #include <QLabel> #include <QLineEdit> class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = 0); private: QGroupBox *groupBox1; QGroupBox *groupBox2; QGroupBox *groupBox3; QGroupBox *groupBox4; QGroupBox *groupBox5; QGroupBox *groupBox6; QGridLayout *grid; QVBoxLayout *vbox1; QVBoxLayout *vbox2; QVBoxLayout *vbox3; QHBoxLayout *hbox4; QVBoxLayout *vbox5; QHBoxLayout *hbox6; QLineEdit *ledit; QRadioButton *radio1; QRadioButton *radio2; QRadioButton *radio3; QRadioButton *radio4; QRadioButton *radio5; QRadioButton *radio6; QRadioButton *radio7; QRadioButton *radio8; QLabel *lbl1; QLabel *lbl2; QLabel *lbl1_2; QPushButton *exitb; QPushButton *okb; private slots: void res(); }; #endif // WIDGET_H
#include "widget.h" #include <QString> Widget::Widget(QWidget *parent) : QWidget(parent) { grid = new QGridLayout(this); // Содержимое ячеек groupBox1 = new QGroupBox(tr("f"),this); groupBox2 = new QGroupBox(tr("nu"),this); groupBox3 = new QGroupBox(tr("n"),this); groupBox4 = new QGroupBox(tr(""),this); groupBox5 = new QGroupBox(tr("Input"),this); groupBox6 = new QGroupBox(tr(""),this); // Размещаем элементы в таблице 3 х 2 grid->addWidget(groupBox1,0,0); grid->addWidget(groupBox2,1,0); grid->addWidget(groupBox3,2,0); grid->addWidget(groupBox4,0,1); grid->addWidget(groupBox5,1,1); grid->addWidget(groupBox6,2,1); setLayout(grid); // Создаем заголовок окна setWindowTitle(tr("File Size")); // Первая группа radio1 = new QRadioButton(tr("11"),this); radio2 = new QRadioButton(tr("22.05"),this); radio3 = new QRadioButton(tr("44.1"),this); // Выбор переключателя по умолчанию radio3->setChecked(true); // Вертикальная компоновка внутри vbox1 = new QVBoxLayout(this); vbox1->addWidget(radio1); vbox1->addWidget(radio2); vbox1->addWidget(radio3); groupBox1->setLayout(vbox1); // Вторая группа; по тому же принципу radio4 = new QRadioButton(tr("8"),this); radio5 = new QRadioButton(tr("16"),this); radio6 = new QRadioButton(tr("32"),this); // Выбор переключателя по умолчанию radio5->setChecked(true); // Вертикальная компоновка внутри vbox2 = new QVBoxLayout(this); vbox2->addWidget(radio4); vbox2->addWidget(radio5); vbox2->addWidget(radio6); groupBox2->setLayout(vbox2); // Третья группа radio7 = new QRadioButton(tr("1"),this); radio8 = new QRadioButton(tr("2"),this); // Выбор переключателя по умолчанию radio8->setChecked(true); // Вертикальная компоновка внутри vbox3 = new QVBoxLayout(this); vbox3->addWidget(radio7); vbox3->addWidget(radio8); groupBox3->setLayout(vbox3); // Четвертая lbl1 = new QLabel("t = ",this); lbl1_2 = new QLabel(" min",this); ledit = new QLineEdit(this); // Горизонтальная компоновка внутри hbox4 = new QHBoxLayout(this); hbox4->addWidget(lbl1); hbox4->addWidget(ledit); hbox4->addWidget(lbl1_2); groupBox4->setLayout(hbox4); // Пятая lbl2 = new QLabel(this); // Вертикальная компоновка внутри vbox5 = new QVBoxLayout(this); vbox5->addWidget(lbl2); groupBox5->setLayout(vbox5); // Шестая exitb = new QPushButton(tr("Exit"),this); okb = new QPushButton(tr("Calculate"),this); // Горизонтальная компоновка внутри hbox6 = new QHBoxLayout(this); hbox6->addWidget(okb); hbox6->addWidget(exitb); groupBox6->setLayout(hbox6); // Сигналы connect(okb,SIGNAL(clicked()),this,SLOT(res())); connect(exitb, SIGNAL(clicked()), this, SLOT(close())); } // Функция слота (обработка события) void Widget::res(){ QString string = ledit->text(); double nu, n, f, i; bool ok; double t = string.toDouble(&ok); // Определяем выбранные радиокнопки if (radio1->isChecked()){ f = 11.0; } else if(radio2->isChecked()) { f = 22.05; } else { f = 44.1; } if (radio4->isChecked()){ nu = 8.0; } else if(radio5->isChecked()) { nu = 16.0; } else { nu = 32.0; } if (radio7->isChecked()){ n = 1.0; } else { n = 2.0; } // Вычисление объема файла в Мегабайтах i = f * 1000 * nu * t * n * 60 / 8 / 1024 / 1024; // Если введено число, то выводим результат, // иначе сообщаем об ошибке if (ok!=0) { string.setNum(i); // Используем HTML-форматирование lbl2->setText("<center><b><i>i</i></b> = " + string + " MiB</center>"); } else { lbl2->setText("<center><b><font color=\"red\">FALSE</font></b></center>"); } }
Написать приложение в котором используется HTML-форматирование и/или QSS. В приложении используются виджеты QRadioButton, QPushButton, QLabel, QLineEdit и табличная компоновка. Таким приложением может являться программа, вычисляющая сопротивление электрической цепи, состоящей из двух сопротивлений. Резисторы могут быть соединены последовательно и параллельно. Выводить значение в килоомах (опционально, с помощью QCheckBox).