Похожие презентации:
Создание графического интерфейса пользователя
1.
Создание графическогоинтерфейса пользователя
2.
Существующие интерфейсывзаимодействия машины с
пользователем
Текстовой интерфейс пользователя
Интерфейс командной строки
Оконный интерфейс с использованием
псевдографики
Графический интерфейс пользователя
Оконный интерфейс
Масштабируемый интерфейс
3.
Текстовой интерфейс(Интерфейс командной строки)
4.
Текстовой интерфейс(Оконный интерфейс с
использованием псевдографики)
5.
Графический интерфейс(Оконный интерфейс)
6.
Графический интерфейс(Масштабируемый интерфейс)
7.
Библиотеки и API для созданияинтерфейса пользователя
WinAPI (Только Windows)
Qt (Кросс-платформенная)
wxWidgets (Кросс-платформенная)
Motif (Кросс-платформенная)
Tk (Кросс-платформенная)
Cocoa (Только Mac OS X)
Carbon (Только Mac OS X и младше)
8.
Пример программы на QtИсходный код программы использующей библиотеку Qt
#include <QApplication>
#include <QFont>
#include <QPushButton>
int main(int argc, char* argv[])
{
QApplication app(argc, argv); // создание приложения
QPushButton quit("Quit"); // создание кнопки
quit.resize(75, 30); // установка размеров кнопки
quit.setFont(QFont("Times", 18, Qfont::Bold)); // установка
шрифта
// организация связи между событием и реакцией на него
QObject::connect(&quit, SIGNAL(clicked()), &app,
SLOT(quit()));
quit.show(); // показать кнопку
return app.exec(); // передать управление приложению
9.
Пример программы на QtПолученный результат компиляции и запуска
приложения
созданная кнопка
10.
Возможная общая структураприложения
QApplication
QPushButton
QMainWindow
QTableView
TMonitor
QSqlDatabase
TDataBase
TComputer
11.
Подсистемы QtQtCore — ядро библиотеки
QtGui — графический интерфейс
пользователя
QtNetwork — сетевой интерфейс
QtOpenGL — 3D графика
QtSql — интерфейс баз данных
QtSvg — векторная графики
QtXml — парсер XML
QtScript — парсер скриптов
12.
Сигналы/слотыВ Qt различные
функции-члены можно Qt
связывать, как с
каким либо событием (сигналом) так и с друг другом.
connect(где_произошёл_сигнал, SIGNAL(сигнал),
где_можно_обработать,
SLOT(слот));
Допустим по нажатию на кнопку происходит сигнал:
clicked() в объекте button. Для разных объектов
могут возникать различные сигналы.
Так же в класс необходимо добавлять макрос Q_OBJECT,
что бы можно было собрать программу содержащею
сигналы/слоты.
13.
Пример приложения на Qt/Си++Требуется написать текстовой редактор с меню
и возможностью открывать и закрывать
простые текстовые файлы.
14.
Структура организациифайлов проекта
mainwindow.h
new.png
open.pn
g
save.pn
g
main.cpp
mainwindow.cp
p
app.qrc
app.pro
15.
# Место расположения и имя исполняемого файлаTARGET = bin/qtapp
Содержание
файла
проекта
DEPENDPATH += . bin include po src
# Список всех катологов используемых в проекте
# Каталог заголовочных файлов
INCLUDEPATH += . include
# Кодировка исходного кода
CODECFORSRC = UTF-8
# Настойки
CONFIG += qt debug
# Заголовочные файлы
HEADERS += include/mainwindow.h
# Файлы исходного кода
SOURCES += src/main.cpp src/mainwindow.cpp
# Каталог расположения объектных файлов
OBJECTS_DIR = obj
# Каталог расположения файлов moc
16.
Содержание файла ресурсов<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>images/new.png</file>
<file>images/open.png</file>
<file>images/save.png</file>
</qresource>
</RCC>
17.
Структура подсистем приложенияMainWindow()
QMainWindow
createActions()
MainWindow
QPlainTextEdi
*textEdit
t
*fileMen
QMenu
u
QAction
QString
createMenus()
maybeSave
()
*newAct
connect
newFile()
*openAc
t
connect
open()
*saveAc
t
connect
save()
*exitAct
connect
close()
curFile
setCurrentFile()
loadFile()
saveFile()
strippedName()
18.
Содержимое файлаmainwindow.h
#include <QMainWindow>
class QMenu;
class QAction;
class QPlainTextEdit;
class MainWindow: public QMainWindow
{
Q_OBJECT
сиг/сл
// макрос необходим так как имеются свои
public:
MainWindow(QWidget* parent = 0);
virtual ~MainWindow();
private slots: // методы слоты
void newFile();
19.
voidэлементов меню
createActions(); // создание
Содержимое файла
void
createMenus(); // создание меню
mainwindow.h
void
setCurrentFile(const QString &
fileName);
QString
fullFileName);
strippedName(const QString &
QString
редактируемый файл
curFile; // текущий
QMenu
*fileMenu;
QAction
*newAct;
QAction
*openAct;
QAction
*saveAct;
QAction
*exitAct;
QPlainTextEdit
*textEdit;
20.
#include <QtGui>Содержимое файла
#include "mainwindow.h"
mainwindow.cpp
#include <QTranslator>
MainWindow::MainWindow(QWidget* parent): QMainWindow(parent)
{
textEdit = new QplainTextEdit; // создаём текстовое
поле
setCentralWidget(textEdit);
центре
//
размещаем его в
createActions(); // создаём пункты меню
createMenus(); // создаём меню
setWindowTitle(tr("Text editor. Qt Application."));
}
MainWindow::~MainWindow()
21.
{Содержимое файла
newAct = new QAction(QIcon(":/images/new.png"), tr("&New"), this);
mainwindow.cpp
// создаём пункты меню
newAct->setShortcuts(QKeySequence::New);
connect(newAct, SIGNAL(triggered()), this, SLOT(newFile()));
openAct = new
QAction(QIcon(":/images/open.png"),tr("&Open..."),this);
openAct->setShortcuts(QKeySequence::Open);
connect(openAct, SIGNAL(triggered()), this, SLOT(open()));
saveAct = new QAction(QIcon(":/images/save.png"), tr("&Save"),
this);
saveAct->setShortcuts(QKeySequence::Save);
connect(saveAct, SIGNAL(triggered()), this, SLOT(save()));
exitAct = new QAction(tr("E&xit"), this);
22.
void MainWindow::createMenus(){
меню
Содержимое
файла
// добавляем пункт меню File и вставляем в него пункт
mainwindow.cpp
fileMenu = menuBar()->addMenu(tr("&File"));
fileMenu->addAction(newAct);
fileMenu->addAction(openAct);
fileMenu->addAction(saveAct);
fileMenu->addSeparator();
fileMenu->addAction(exitAct);
}
void MainWindow::newFile()
{
if (maybeSave()) { // проверяем редактировался ли файл
textEdit->clear();
23.
Содержимое файлаvoid MainWindow::open()
mainwindow.cpp
{
if (maybeSave()) { // проверяем редактировался ли файл
QString fileName =
QFileDialog::getOpenFileName(this);
if (!fileName.isEmpty()) // если есть открытый файл
loadFile(fileName); // загрузить файл
}
}
bool MainWindow::save()
{
return saveFile(curFile);
}
24.
bool MainWindow::maybeSave(){
Содержимое файла
if (textEdit->document()->isModified()) {
mainwindow.cpp
QMessageBox::StandardButton ret;
ret = QMessageBox::warning(this, tr("Application"),
tr("The document has been modified.\n"
"Do you want to save your changes?"),
QMessageBox::Save |
QMessageBox::Discard |
QMessageBox::Cancel);
if (ret == QMessageBox::Save)
return save();
else if (ret == QMessageBox::Cancel)
return false;
}
25.
void MainWindow::loadFile(const QString & fileName){
Содержимое файла
QFile file(fileName);
mainwindow.cpp
if (!file.open(QFile::ReadOnly | QFile::Text)) {
QMessageBox::warning(this, tr("Application"),
tr("Cannot read file %1:\n%2.")
.arg(fileName)
.arg(file.errorString()));
return;
}
QTextStream in(&file); // открываем поток на чтение
QApplication::setOverrideCursor(Qt::WaitCursor);
textEdit->setPlainText(in.readAll()); // читаем из потока
QApplication::restoreOverrideCursor();
26.
{Содержимое файла
if (!file.open(QFile::WriteOnly
| QFile::Text)) {
mainwindow.cpp
QFile file(fileName);
QMessageBox::warning(this, tr("Application"),
tr("Cannot write file
%1:\n%2.")
.arg(fileName).arg(file.errorString()));
return false;
}
QTextStream out(&file); // открываем поток на запись
QApplication::setOverrideCursor(Qt::WaitCursor);
out << textEdit->toPlainText(); // пишем в поток
QApplication::restoreOverrideCursor();
setCurrentFile(fileName);
27.
{Содержимое файла
textEdit->document()->setModified(false);
mainwindow.cpp
curFile = fileName;
setWindowModified(false);
QString shownName;
if (curFile.isEmpty()) // если файл не открыт
shownName = "untitled.txt";
else shownName = strippedName(curFile); // убираем путь
setWindowTitle(tr("%1[*] - %2")
.arg(shownName)
.arg(tr("Application")));
}
QString MainWindow::strippedName(const QString & fullFileName)
{
28.
Содержимое файла main.cpp#include <QApplication>
#include "mainwindow.h"
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
MainWindow mainWindow;
mainWindow.show();
return app.exec();
}
29.
Пример готовой программы наQt/Си++