1
<?xml version="1.0" encoding="iso-8859-1"?>
3
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
4
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
6
<title>Qt 4.6: mainwindow.cpp Example File (xmlpatterns/schema/mainwindow.cpp)</title>
7
<link href="classic.css" rel="stylesheet" type="text/css" />
10
<table border="0" cellpadding="0" cellspacing="0" width="100%">
12
<td align="left" valign="top" width="32"><a href="http://qt.nokia.com/"><img src="images/qt-logo.png" align="left" border="0" /></a></td>
13
<td width="1"> </td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a> · <a href="classes.html"><font color="#004faf">All Classes</font></a> · <a href="functions.html"><font color="#004faf">All Functions</font></a> · <a href="overviews.html"><font color="#004faf">Overviews</font></a></td><td class="searchBar" align="right" valign="center"><form action="http://www.google.com/cse" id="cse-search-box"><div><input type="hidden" name="cx" value="000136343326384750312:dhbxnqlakyu" /><input type="hidden" name="ie" value="UTF-8" /><input type="text" name="q" size="31" /><input type="submit" name="sa" value="Search" /></div></form></td>
14
</tr></table><h1 class="title">mainwindow.cpp Example File<br /><span class="small-subtitle">xmlpatterns/schema/mainwindow.cpp</span>
16
<pre><span class="comment"> /****************************************************************************
18
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
19
** All rights reserved.
20
** Contact: Nokia Corporation (qt-info@nokia.com)
22
** This file is part of the examples of the Qt Toolkit.
24
** $QT_BEGIN_LICENSE:LGPL$
25
** No Commercial Usage
26
** This file contains pre-release code and may not be distributed.
27
** You may use this file in accordance with the terms and conditions
28
** contained in the Technology Preview License Agreement accompanying
31
** GNU Lesser General Public License Usage
32
** Alternatively, this file may be used under the terms of the GNU Lesser
33
** General Public License version 2.1 as published by the Free Software
34
** Foundation and appearing in the file LICENSE.LGPL included in the
35
** packaging of this file. Please review the following information to
36
** ensure the GNU Lesser General Public License version 2.1 requirements
37
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
39
** In addition, as a special exception, Nokia gives you certain additional
40
** rights. These rights are described in the Nokia Qt LGPL Exception
41
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
43
** If you have questions regarding the use of this file, please contact
44
** Nokia at qt-info@nokia.com.
55
****************************************************************************/</span>
57
#include <QtGui>
58
#include <QtXmlPatterns>
60
#include "mainwindow.h"
61
#include "xmlsyntaxhighlighter.h"
63
class MessageHandler : public QAbstractMessageHandler
67
: QAbstractMessageHandler(0)
71
QString statusMessage() const
78
return m_sourceLocation.line();
83
return m_sourceLocation.column();
87
virtual void handleMessage(QtMsgType type, const QString &description,
88
const QUrl &identifier, const QSourceLocation &sourceLocation)
94
m_description = description;
95
m_sourceLocation = sourceLocation;
99
QtMsgType m_messageType;
100
QString m_description;
101
QSourceLocation m_sourceLocation;
104
MainWindow::MainWindow()
108
new XmlSyntaxHighlighter(schemaView->document());
109
new XmlSyntaxHighlighter(instanceEdit->document());
111
schemaSelection->addItem(tr("Contact Schema"));
112
schemaSelection->addItem(tr("Recipe Schema"));
113
schemaSelection->addItem(tr("Order Schema"));
115
instanceSelection->addItem(tr("Valid Contact Instance"));
116
instanceSelection->addItem(tr("Invalid Contact Instance"));
118
connect(schemaSelection, SIGNAL(currentIndexChanged(int)), SLOT(schemaSelected(int)));
119
connect(instanceSelection, SIGNAL(currentIndexChanged(int)), SLOT(instanceSelected(int)));
120
connect(validateButton, SIGNAL(clicked()), SLOT(validate()));
121
connect(instanceEdit, SIGNAL(textChanged()), SLOT(textChanged()));
123
validationStatus->setAlignment(Qt::AlignCenter | Qt::AlignVCenter);
129
void MainWindow::schemaSelected(int index)
131
instanceSelection->clear();
133
instanceSelection->addItem(tr("Valid Contact Instance"));
134
instanceSelection->addItem(tr("Invalid Contact Instance"));
135
} else if (index == 1) {
136
instanceSelection->addItem(tr("Valid Recipe Instance"));
137
instanceSelection->addItem(tr("Invalid Recipe Instance"));
138
} else if (index == 2) {
139
instanceSelection->addItem(tr("Valid Order Instance"));
140
instanceSelection->addItem(tr("Invalid Order Instance"));
144
QFile schemaFile(QString(":/schema_%1.xsd").arg(index));
145
schemaFile.open(QIODevice::ReadOnly);
146
const QString schemaText(QString::fromUtf8(schemaFile.readAll()));
147
schemaView->setPlainText(schemaText);
152
void MainWindow::instanceSelected(int index)
154
QFile instanceFile(QString(":/instance_%1.xml").arg((2*schemaSelection->currentIndex()) + index));
155
instanceFile.open(QIODevice::ReadOnly);
156
const QString instanceText(QString::fromUtf8(instanceFile.readAll()));
157
instanceEdit->setPlainText(instanceText);
162
void MainWindow::validate()
164
const QByteArray schemaData = schemaView->toPlainText().toUtf8();
165
const QByteArray instanceData = instanceEdit->toPlainText().toUtf8();
167
MessageHandler messageHandler;
170
schema.setMessageHandler(&messageHandler);
172
schema.load(schemaData);
174
bool errorOccurred = false;
175
if (!schema.isValid()) {
176
errorOccurred = true;
178
QXmlSchemaValidator validator(schema);
179
if (!validator.validate(instanceData))
180
errorOccurred = true;
184
validationStatus->setText(messageHandler.statusMessage());
185
moveCursor(messageHandler.line(), messageHandler.column());
187
validationStatus->setText(tr("validation successful"));
190
const QString styleSheet = QString("QLabel {background: %1; padding: 3px}")
191
.arg(errorOccurred ? QColor(Qt::red).lighter(160).name() :
192
QColor(Qt::green).lighter(160).name());
193
validationStatus->setStyleSheet(styleSheet);
196
void MainWindow::textChanged()
198
instanceEdit->setExtraSelections(QList<QTextEdit::ExtraSelection>());
201
void MainWindow::moveCursor(int line, int column)
203
instanceEdit->moveCursor(QTextCursor::Start);
204
for (int i = 1; i < line; ++i)
205
instanceEdit->moveCursor(QTextCursor::Down);
207
for (int i = 1; i < column; ++i)
208
instanceEdit->moveCursor(QTextCursor::Right);
210
QList<QTextEdit::ExtraSelection> extraSelections;
211
QTextEdit::ExtraSelection selection;
213
const QColor lineColor = QColor(Qt::red).lighter(160);
214
selection.format.setBackground(lineColor);
215
selection.format.setProperty(QTextFormat::FullWidthSelection, true);
216
selection.cursor = instanceEdit->textCursor();
217
selection.cursor.clearSelection();
218
extraSelections.append(selection);
220
instanceEdit->setExtraSelections(extraSelections);
222
instanceEdit->setFocus();
224
<p /><address><hr /><div align="center">
225
<table width="100%" cellspacing="0" border="0"><tr class="address">
226
<td width="40%" align="left">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies)</td>
227
<td width="20%" align="center"><a href="trademarks.html">Trademarks</a></td>
228
<td width="40%" align="right"><div align="right">Qt 4.6.0</div></td>
229
<script type="text/javascript" src="http://www.google.com/jsapi"></script><script type="text/javascript">google.load("elements", "1", {packages: "transliteration"});</script><script type="text/javascript" src="http://www.google.com/coop/cse/t13n?form=cse-search-box&t13n_langs=en"></script><script type="text/javascript" src="http://www.google.com/coop/cse/brand?form=cse-search-box&lang=en"></script></tr></table></div></address></body>