main.cpp

来自「奇趣公司比较新的qt/emd版本」· C++ 代码 · 共 543 行 · 第 1/2 页

CPP
543
字号
        featureTree->setExpanded(index, false);    }}void Main::updateStatus(int numFeatures){    QSettings settings;    QString featureFile = settings.value("featureFile").toString();    QString configFile = settings.value("lastConfig").toString();    QString message("Using features from %1");    if (numFeatures >= 0) {        QString s("%1 features loaded from %2");        statusBar()->showMessage(s.arg(numFeatures).arg(featureFile));    }    QString appName = QApplication::applicationName();    if (configFile.isEmpty())        configFile = "New File";    setWindowTitle(appName + " - " + configFile + "[*]");}void Main::modelChanged(){    setWindowModified(true);}void Main::init(){    QSettings settings;    QString features = settings.value("featureFile").toString();    if (features.isEmpty() || !QFileInfo(features).isFile()) {        features = QFileDialog::getOpenFileName(this,                                                "Open a feature file",                                                defaultPath,                                                "Qt Features (qfeatures.txt)");    }    settings.setValue("featureFile", features);    loadFeatures(features);    expandView();    collapseView();    QString confFile = settings.value("lastConfig").toString();    if (confFile.isEmpty())        return;    loadConfig(confFile);}void Main::openConfig(){    QSettings settings;    QString configDir;    QString prevFile = settings.value("lastConfig").toString();    if (!prevFile.isEmpty())        configDir = QFileInfo(prevFile).path();    if (configDir.isEmpty())        configDir = defaultPath;    QString configFile;    configFile = QFileDialog::getOpenFileName(this,                                              "Open a configuration file",                                              configDir,                                              "Header files (*.h)");    enableAll();    if (!configFile.isEmpty())        loadConfig(configFile);    settings.setValue("lastConfig", QFileInfo(configFile).absoluteFilePath());}void Main::saveConfig(){    QSettings settings;    QString configDir;    QString prevFile = settings.value("lastConfig").toString();    if (!prevFile.isEmpty())        configDir = QFileInfo(prevFile).path();    if (configDir.isEmpty())        configDir = defaultPath;    QString configFile;    configFile = QFileDialog::getSaveFileName(this,                                              "Save configuration file",                                              configDir,                                              "Header files (*.h)");    if (configFile.isEmpty())        return;    QFile file(configFile);    if (!file.open(QIODevice::WriteOnly)) {	QMessageBox::warning(this,"Warning",                             "Cannot write to file " + configFile);	return;    }    QTextStream stream(&file);    FeatureTreeModel *model;    model = static_cast<FeatureTreeModel*>(featureTree->model());    model->writeConfig(stream);    settings.setValue("lastConfig", QFileInfo(configFile).absoluteFilePath());    setWindowModified(false);    updateStatus();}void Main::loadConfig(const QString &filename){    if (!QFileInfo(filename).isFile())	return;    QFile file(filename);    if (!file.open(QIODevice::ReadOnly)) {	QMessageBox::warning(this,"Warning", "Cannot open file " + filename);	return;    }    QTextStream stream(&file);    FeatureTreeModel *model;    model = static_cast<FeatureTreeModel*>(featureTree->model());    model->readConfig(stream);    QSettings settings;    settings.setValue("lastConfig", QFileInfo(filename).absoluteFilePath());    setWindowModified(false);    updateStatus();}void Main::loadFeatures(const QString &filename){    Feature::clear();    QFile file(filename);    if (!file.open(QIODevice::ReadOnly)) {	QMessageBox::warning(this,"Warning", "Cannot open file " + filename);	return;    }    Feature *feature = 0;    int numFeatures = 0;    updateStatus(numFeatures);    QTextStream s(&file);    for (QString line = s.readLine(); !s.atEnd(); line = s.readLine()) {	line = line.simplified();	if (line.isEmpty())	    continue;	if (line.startsWith('#'))	    continue;	int colon = line.indexOf(':');	if (colon < 0) { // assume description            QString description = feature->description().simplified();            description += " " + line;            feature->setDescription(description);	    continue;	}	QString tag = line.left(colon);	QString value = line.mid(colon+1).simplified();	if (tag == "Feature") {            if (feature)                featureModel->addFeature(feature);            feature = Feature::getInstance(value);            updateStatus(++numFeatures);	} else if (tag == "Requires") {            Q_ASSERT(feature);            feature->setDependencies(value.split(' ', QString::SkipEmptyParts));	} else if (tag == "Name") {	    Q_ASSERT(feature);            feature->setTitle(value);	} else if (tag == "Section") {	    Q_ASSERT(feature);            feature->setSection(value);	} else if (tag == "SeeAlso") {	    Q_ASSERT(feature);            feature->setRelations(value.split(' ', QString::SkipEmptyParts));        } else if (tag == "Description") {            Q_ASSERT(feature);            feature->setDescription(value);	}    }    if (feature)        featureModel->addFeature(feature);    featureTree->resizeColumnToContents(0);    QSettings settings;    settings.setValue("featureFile", QFileInfo(filename).absoluteFilePath());    updateStatus();}void Main::showInfo(const QModelIndex &index){    FeatureTreeModel *model;    model = static_cast<FeatureTreeModel*>(featureTree->model());    if (const Feature *feature = model->getFeature(index))	textBrowser->setHtml(feature->toHtml());    // Ensure index is visible    QModelIndex parent = model->parent(index);    while (parent.isValid()) {        featureTree->setExpanded(parent, true);        parent = model->parent(parent);    }    featureTree->scrollTo(index);    featureTree->setCurrentIndex(index);}void Main::showInfo(const QString &feature){    const Feature *f = Feature::getInstance(feature);    FeatureTreeModel *model;    model = static_cast<FeatureTreeModel*>(featureTree->model());    showInfo(model->index(f));}void Main::about(){    QMessageBox::about(this, "About qconfig",	"<p><b><font size=\"+2\">Qtopia Core build configuration</font></b></p>"	"<p></p>"	"<p>Version 2.0</p>"	"<p>Copyright (C) 2001-2007 Trolltech ASA. All rights reserved.</p>"	"<p></p>"	"<p>This program is licensed to you under the terms of the GNU General "	"Public License Version 2 as published by the Free Software Foundation. This "	"gives you legal permission to copy, distribute and/or modify this software "	"under certain conditions. For details, see the file 'LICENSE.GPL' that came with "	"this software distribution. If you did not get the file, send email to "	"info@trolltech.com.</p>\n\n<p>The program is provided AS IS with NO WARRANTY "	"OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS "	"FOR A PARTICULAR PURPOSE.</p>"    );}void Main::aboutQt(){    QMessageBox::aboutQt( this, tr("qconfig") );}int main(int argc, char** argv){    QApplication app(argc,argv);    app.setOrganizationDomain("trolltech.com");    app.setOrganizationName("Trolltech");    app.setApplicationName("QConfig");    Main m;    defaultPath = QLibraryInfo::location(QLibraryInfo::PrefixPath)                  + "/src/corelib/global";    for (int i = 1; i < argc; ++i) {	QString arg = argv[i];	if (arg == "-f" && i+1 < argc)            m.loadFeatures(argv[++i]);	else if (arg == "-c" && i+1 < argc)            m.loadConfig(argv[++i]);    }    m.resize(m.sizeHint() + QSize(500,300));    m.show();    return app.exec();}#include "main.moc"

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?