![](/user_photo/87795_E3IiP.jpg)
Qt / Лабораторная №2
.docxЦель работы: описать исходного кода программы To Do List.
Ход работы
Добавление методов, кнопок в главный класс.
class TDLMainWindow : public QMainWindow
{
Q_OBJECT
public:
TDLMainWindow(QWidget* parent = nullptr);
~TDLMainWindow();
private slots:
void onAdd();
void onRemove();
private:
Ui::TDLMainWindow* ui;
QStringListModel* model_1 = nullptr; //Класс QStringListModel предоставляет модель, которая предоставляет строки
QStringListModel* model_2 = nullptr;
QSettings* settings;
QAction* m_pActAdd = nullptr;
QAction* m_pActRemove = nullptr;
};
Восстановления геометрии окна через обращение классу QT QSettings.
QSettings s;
restoreGeometry(s.value("ToDoList", QByteArray()).toByteArray());
restoreState(s.value("GP", QByteArray()).toByteArray());
Перенаправление элементов из формы функции QT.
ui->listView->setModel(model_1); // Склеиваем модель и вид вместе
ui->listView->setEditTriggers(QAbstractItemView::AnyKeyPressed| QAbstractItemView::DoubleClicked); //добавление дополнительных функциий в список.
ui->listView->setDragDropMode(QAbstractItemView::DragDrop); //вкл функции DragDrop
ui->listView->setDefaultDropAction(Qt::MoveAction); //действие по умолчанию
ui->listView->setDragEnabled(true);
ui->listView->setAcceptDrops(true);
Открытие файла
QFile textFile(":/resources/Data.txt");
if (!textFile.open(QIODevice::ReadOnly)) {
QMessageBox::information(0, "Error", textFile.errorString());
}
Тестовый поток для чтения из файла
QTextStream textStream(&textFile);
while (true)
{
QString line = textStream.readLine();
if (line.isNull())
break;
else
stringList_1.append(line);
}
Заполнение модели
model_1->setStringList(stringList_1);
Панель инструментов.
QToolBar* pToolBar = new QToolBar(this);
addToolBar(pToolBar);
m_pActAdd = new QAction(this);
Загрузка иконок панели инструментов из ресурсов.
m_pActAdd->setIcon(QIcon(":/resources/add.png"));
connect(m_pActAdd, &QAction::triggered, this, &TDLMainWindow::onAdd);
m_pActRemove = new QAction(this);
m_pActRemove->setIcon(QIcon(":/resources/remove.png"));
connect(m_pActRemove, &QAction::triggered, this, &TDLMainWindow::onRemove);
pToolBar->addAction(m_pActAdd);
pToolBar->addAction(m_pActRemove);
}
Кнопка добавить. Добавление строк в лист методами QT (insertRows(row, 1)).
void TDLMainWindow::onAdd()
{
int row = model_1->rowCount();
model_1->insertRows(row, 1);
QModelIndex index = model_1->index(row);
ui->listView->setCurrentIndex(index);
ui->listView->edit(index);
}
Удаления задач (строк).
void TDLMainWindow::onRemove()
{
model_1->removeRows(ui->listView->currentIndex().row(), 1);
}
Сохранения геометрии окна после закрытии приложения, с помощью деструктора.
TDLMainWindow::~TDLMainWindow()
{
QSettings s; //запись геометрии окна после закрытия
s.setValue("GP", saveState());
s.setValue("ToDoList", saveGeometry());
delete ui;
}
Вывод: в ходе лабораторной работы описали исходный кода программы.