ПРОГРАММА SIMPLEPAD В QT CREATOR
Эта статья - своеобразная ретроспектива, первый опыт создания собственного блокнота в QT. Теперь у меня разработана гораздо более совершенная версия данного приложения. Конечно, код остался малость недоработанным и корявым, однако прогресс налицо: SimplePad 2.1.
Суть задумки в том, чтобы создать элементарный текстовый редактор с gui интерфейсом.
Начнем с создания любого проекта с параметрами по умолчанию (во избежании недоразумений важно их не менять), сохраняем куда хотим.
Затем, когда наш проект создан, переходим в mainwindow.ui и добавляем на поле 3 элемента:
Две "Push Button" с именами объекта "Btn1" и "Btn2" соответственно, а так же "Text Edit" с именем объекта "textEdit". Первая будет для выхода, вторая для очистки текстового поля.
Далее создаем пункты меню "Файл": "Открыть", "Сохранить", "Закрыть" с именами объекта "act2", "act4", "act6" соответственно.
Щелкнув по кнопке "Btn1" и "Btn2" правой кнопкой мыши, в контекстном меню выбираем пункт "Перейти к слоту", затем выбираем сигнал "clicked".
Для пунктов меню делаем то же самое, только с сигналом "Triggered".
Еще создадим пункт меню "Справка", под ним опцию "О программе", назовем ее "action". Сигнал тот же.
Содержание "main.cpp":
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow w; // Объявляем новое окошко
w.setWindowTitle(("SimplePad")); // Задаем имя окошка. Такое, в полосочке наверху.
w.show(); // Выводим новое окошко на экран.
return app.exec();
}
Содержание mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFile>
#include <QTextStream>
#include <QMessageBox>
#include <QTextEdit>
#include <QPushButton>
#include <QFileDialog>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
setWindowIcon(QIcon("/home/madmentat/griffin.ico"));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_act6_triggered() // Закрытие программы через меню панели инструментов
{
qApp->closeAllWindows();
qApp->quit();
}
void MainWindow::on_act2_triggered() // Открываем файл
{
QFile file(QFileDialog::getOpenFileName(this,tr("Открыть файл"),"",tr("Text Files (*.txt);;C++ Files (*.cpp *.h)"))); // указываем местоположения файла, с которым мы работаетм
if(!file.open(QIODevice::ReadOnly))
QMessageBox::information(0,"Ошибка!",file.errorString()); // Сообщение об ошибке, если что-то не получилось.
QTextStream in(&file);
ui->textEdit->setText(in.readAll());
}
void MainWindow::on_act4_triggered() // Конструкция "Сохранить" - не работает // "save" option. Don't know what to do, it's doesn't work :(
{
//QTextEdit textEdit; // Объявляем наше окошко редактирования текста
//QFile file(this); // указываем местоположения файла, с которым мы работаетм
//if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
// return;
// QTextStream out(&file); //поток для записи текста
// out <<ui->textEdit->toPlainText();
// statusBar()->showMessage(tr("File saved"), 2000); // Эта функция выводит соответствующее сообщение в статусбар, но я так и не понел к чему эта большая цыфра.
}
void MainWindow::on_Btn1_clicked()
{
qApp->closeAllWindows(); // вот эта строчка, по-видимому, закрывает все окна приложения
qApp->quit(); // а эта закрывает само приложения
}
void MainWindow::on_Btn2_clicked()
{
QTextEdit textEdit; // Объявляем наше текстовое поле
ui->textEdit->clear(); // Очищаем его
}
void MainWindow::on_act0_triggered()
{
QMessageBox::warning(this, "SimplePad v.1.1 Beta","<p align=justify>Данная программа разработана гениальным программистом Андреем Тютрюмовым в QT Creator специально для проекта <a href='http://www.madmentat.ru' target=blank>madmentat.ru</a></p>");
}
void MainWindow::on_act5_triggered() // конструкция "сохранить как" - работает
{
QTextEdit textEdit; // Объявляем наше окошко редактирования текста
QFile file(QFileDialog::getSaveFileName(this, tr("Save File"), "", tr("Text Files (*.txt);;C++ Files (*.cpp *.h)"))); // указываем местоположения файла, с которым мы работаетм
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
return;
QTextStream out(&file); //поток для записи текста
out <<ui->textEdit->toPlainText();
statusBar()->showMessage(tr("File saved"), 2000); // Эта функция выводит соответствующее сообщение в статусбар, но я так и не понел к чему эта большая цыфра.
}
Вот и все. PROFIT!!!!11111