|
Короткие примеры (справочник)
1. Структура приложенияmain.cpp#include <QApplication> // описание диалогового окна #include "dqtlens.h" int main(int argc, char* argv[]) { // создаем приложение QApplication app(argc, argv); // создаем диалоговое окно DQtOLens dialog; // запускаем дилоговое окно dialog.show(); // запускаем приложение return app.exec(); } dqtlens.h#ifndef DQTLENS_H #define DQTLENS_H // подключение файла с описанием ресурсов. // Этот файл генерируется автоматически во время компиляции по ui-файлу. // Имя подключаемого файла должно быть “ui_[имя ui-файла].h” #include "ui_dqtlens.h" // подключение файла с описанием QDialog #include <QDialog> class DQtLens: public QDialog { // Q_OBJECT public: // конструктор и деструктор DQtLens (QWidget *parent = 0); ~DQtLens (); private: // описание ресурсов диалогового окна (ui-файл) Ui::dqtlens m_ui; }; #endif // DQTLENS_H dqtlens.cpp#include "dqtlens.h" DQtLens:: DQtLens (QWidget *parent) : QDialog (parent) { m_ui.setupUi(this); } DQtLens::~ DQtLens () { } 2. Работа с вещественными числамиУстановка типа данных (double) и начальных значений (в конструкторе)#include <QDoubleValidator> … m_ui.m_LE_Value->setValidator(new QDoubleValidator(m_ui.m_LE_Value)); m_ui.m_LE_Value->setText("1.0"); Берем значения из диалога, вычисляем и записываем в диалогdouble dValue = m_ui.m_LE_Value->text().toDouble()*2; m_ui.m_LE_Value->setText(QString("%1").arg(dValue)); 3. Работа с QString (перевод в число, в std::string)перевод из строки в числоQString qText="55.55"; double dValue= sText.toDouble(); перевод из числа в строкуdouble dValue=55.55; QString qText=QString("%1").arg(dValue); перевод из QString в std::stringQString qText="test";
std::string sText= qText.toStdString();
перевод из std::string в QStringstd::string sText="test";
QString qText = QString(sText.c_str());
4. Обработка событий «сигнал» - «слот»В h-файле – описание функции (слота) обработки нажатия кнопки// ключевое слово, обозначающее, что дальше идет описание слотов public slots: // описание слота (название функции придумываем сами) void OnPBCalc(); В конструкторе - связь между сигналом(событием) от объекта и функцией-обработкой события// connect([кто посылает], SIGNAL([сигнал]), [кто обрабатывает], SLOT([слот])); connect(m_ui.m_PB_Calc, SIGNAL(clicked()), this, SLOT(OnPBCalc())); или
// connect([кто посылает], &[имя_класса]::[сигнал], [кто обрабатывает], &[имя_класса]::[слот]);
connect(ui->m_PB_Calc, &QButton::clicked, this, &MyDialog::OnPBCalc);
Функция (слот):#include <QMessageBox> … void DQtLens::OnPBCalc() { // обработка события, например вывод сообщения QMessageBox::warning(this, "Заголовок окна", "Текст, выводимый на окне"); } 5. Выпадающие списки (QComboBox)Выполнение каких-то действий при изменении выбранного пункта в списке Сигнал-слот в конструкторе (на забыть описать слот в h-файле)// сигнал вызывается при изменении выбранного пункта списка connect(m_ui.m_CB_Type, SIGNAL(currentIndexChanged(int)), this, SLOT(OnChangeType(int))); Обработка сигнала - по индексуЕсли нумерация элементов в списке известна, и неизменно, лучше пользоваться доступом по индексу void DQtLens::OnChangeType(int) { // нумерация элементов списка начинается с 0 if(m_ui.m_CB_Type->currentIndex()==0) // 1й пункт списка { QMessageBox::warning(this, "Оптическая система", "телескоп"); } else if(m_ui.m_CB_Typе->currentIndex()==1) // 2й пункт списка { QMessageBox::warning(this, "Оптическая система", "микроскоп"); } // и т.д., по количеству пунктов в списке } Обработка сигнала - по текстуЕсли последовательность элементов в списке может быть произвольной, или нужно делать более сложные действия с элементами списка (например искать частичное совпадение с заданным текстом, регулярным выражением и т.д.) можно воспользоваться доступом по тексту. В этом случае будьте очень внимательны с кодировкой русского текста - кодировка списка должна совпадать с шаблоном для поиска. void DQtLens::OnChangeType(int) { if(m_ui.m_CB_OSType->currentText()=="00 - телескоп") { QMessageBox::warning(this, "Оптическая система", "телескоп"); } else if(m_ui.m_CB_OSType->currentText()=="10 - микроскоп") { QMessageBox::warning(this, "Оптическая система", "микроскоп"); } // и т.д. } 6. Переключатели (QRadioButton)Выполнение каких-то действий при выборе переключателя. Сигнал-слот в конструкторе (на забыть описать слот в h-файле)// создаем связь между сигналом(событием) от объекта и функцией-обработкой события. // Оба переключателя будут вызывать одну и ту же функцию connect(m_ui.m_RB_Obj_far, SIGNAL(clicked()), this, SLOT(OnObjTypeChanged())); connect(m_ui.m_RB_Obj_near, SIGNAL(clicked()), this, SLOT(OnObjTypeChanged())); Обработка сигналаvoid DQtLens::OnObjTypeChanged() { if(m_ui.m_RB_Obj_far->isChecked()) { QMessageBox::warning(this, "Тип предмета", "дальний"); } if(m_ui.m_RB_Obj_near->isChecked()) { QMessageBox::warning(this, "Тип предмета", "ближний"); } } 7. Работа с таблицей (QTableWidget)// устанавливаем количество колонок у таблицы m_ui.m_Table->setColumnCount(10); for(int iRow=0; iRow<10; ++iRow) { // вставляем новую строку m_ui.m_Table->insertRow(iRow); // зполняем каждую ячейку for(int iCol=0; iCol<10; ++iCol) { // вычисляем значение, которое хотим поместить в ячейку таблицы double dValue=(iCol+1)*(iRow+1); // создаем новую ячейку (Item) таблицы QTableWidgetItem* qItem = new QTableWidgetItem(); // устнавливаем параметры: ячейка доступна + ее можно выбрать + ее можно редактировать qItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable); // устанавливаем значение в ячейку как double qItem->setData(0, QVariant::fromValue(dValue)); // устанавливаем созданную ячейку в нужное место в таблицы m_ui.m_Table->setItem(iRow, iCol, qItem); } } 8. Создание пункта контекстного менюВ h-файле… // описание указателя на пункт меню QAction *m_pqAddSurface; … // описание функции (слота) обработки вызова пункта меню public slots: void OnAddSurface (); В конструкторе// создаем пункт меню для создания новой поверхности в таблице m_pqAddSurface = new QAction("Добавить новую поверхность перед выделенной", this ); … connect(m_pqAddSurface, &QAction::triggered, this, &DQtLens::OnAddSurface); Функция обработки нажатия на пункт меню// обработка события нажатия на пункт меню void DQtLens::OnAddSurface() { // что-то делаем } |