⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 newform.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
字号:
/******************************************************************************** Copyright (C) 1992-2006 Trolltech ASA. All rights reserved.**** This file is part of the Qt Designer of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file.  Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include "newform.h"#include "qdesigner.h"#include "qdesigner_workbench.h"#include "qdesigner_actions.h"#include "qdesigner_formwindow.h"#include "qdesigner_settings.h"#include <qdesigner_formbuilder_p.h>#include <sheet_delegate_p.h>#include <QtDesigner/abstractformwindow.h>#include <QtCore/QDir>#include <QtCore/QFile>#include <QtCore/QFileInfo>#include <QtGui/QHeaderView>#include <QtGui/QPainter>#include <QtCore/qdebug.h>enum NewForm_CustomRole{    TemplateNameRole = Qt::UserRole + 100};NewForm::NewForm(QDesignerWorkbench *workbench, QWidget *parentWidget)    : QDialog(parentWidget,#ifdef Q_WS_MAC            Qt::Tool |#endif            Qt::WindowTitleHint | Qt::WindowSystemMenuHint),      m_workbench(workbench){    ui.setupUi(this);    ui.treeWidget->setItemDelegate(new qdesigner_internal::SheetDelegate(ui.treeWidget, this));    ui.treeWidget->header()->hide();    ui.treeWidget->header()->setStretchLastSection(true);    ui.lblPreview->setBackgroundRole(QPalette::Base);    ui.chkShowOnStartup->setChecked(QDesignerSettings().showNewFormOnStartup());    loadFrom(QLatin1String(":/trolltech/designer/templates/forms"), true);    QDesignerSettings settings;    foreach(QString path, settings.formTemplatePaths())        loadFrom(path, false);}NewForm::~NewForm(){    QDesignerSettings().setShowNewFormOnStartup(ui.chkShowOnStartup->isChecked());}void NewForm::on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *){    if (current && current->parent()) {        QIcon icon = formPreviewIcon(current->data(0, TemplateNameRole).toString());        if (icon.isNull()) {            ui.createButton->setEnabled(false);            ui.lblPreview->setText(tr("Error loading form"));        } else {            ui.createButton->setEnabled(true);            ui.createButton->setDefault(true);            ui.lblPreview->setPixmap(icon.pixmap(QSize(256, 256)));        }    } else {        ui.createButton->setEnabled(false);        ui.lblPreview->setText(tr("Choose a template for a preview"));    }}void NewForm::on_treeWidget_itemActivated(QTreeWidgetItem *item){    if (item->data(0, TemplateNameRole).isValid())        ui.createButton->animateClick(0);}void NewForm::on_createButton_clicked(){    if (QTreeWidgetItem *item = ui.treeWidget->currentItem()) {        close();        int maxUntitled = 0;        int totalWindows = m_workbench->formWindowCount();        // This will cause some problems with i18n, but for now I need the string to be "static"        QRegExp rx(QLatin1String("untitled( (\\d+))?"));        for (int i = 0; i < totalWindows; ++i) {            QString title = m_workbench->formWindow(i)->windowTitle();            title = title.replace(QLatin1String("[*]"), QLatin1String(""));            if (rx.indexIn(title) != 1) {                if (maxUntitled == 0)                    ++maxUntitled;                if (rx.numCaptures() > 1)                    maxUntitled = qMax(rx.cap(2).toInt(), maxUntitled);            }        }        QDesignerFormWindow *formWindow = workbench()->createFormWindow();        if (QDesignerFormWindowInterface *editor = formWindow->editor()) {            QString formTemplateName = item->data(0, TemplateNameRole).toString();            QFile f(formTemplateName);            if (f.open(QFile::ReadOnly)) {                editor->setContents(&f);                f.close();            } else {                editor->setContents(QString());            }            if (QWidget *container = editor->mainContainer())                formWindow->resize(container->size());        }        QString newTitle = QLatin1String("untitled");        if (maxUntitled)            newTitle += QLatin1String(" ") + QString::number(maxUntitled + 1);        newTitle.append(QLatin1String("[*]"));        formWindow->setWindowTitle(newTitle);        formWindow->editor()->setFileName("");        formWindow->show();    }}void NewForm::on_closeButton_clicked(){    close();}QDesignerWorkbench *NewForm::workbench() const{    return m_workbench;}QIcon NewForm::formPreviewIcon(const QString &fileName){    QIcon result;    QFile f(fileName);    if (f.open(QFile::ReadOnly)) {        qdesigner_internal::QDesignerFormBuilder formBuilder(workbench()->core());        QWidget *fake = new QWidget(0);        fake->setAttribute(Qt::WA_WState_Visible);        if (QWidget *widget = formBuilder.load(&f, fake)) {            widget->setParent(fake, 0);            widget->show();            f.close();            QPixmap pix = QPixmap::grabWidget(widget);            QImage image = pix.toImage();            image = image.scaled(256, 256, Qt::KeepAspectRatio, Qt::SmoothTransformation);            result = QPixmap::fromImage(image);        }        fake->deleteLater();    }    return result;}void NewForm::loadFrom(const QString &path, bool resourceFile){    QDir dir(path);    if (!dir.exists())        return;    // Iterate through the directory and add the templates    QFileInfoList list = dir.entryInfoList(QStringList() << "*.ui", QDir::Files);    if (list.isEmpty())        return;    QChar separator = resourceFile ? QChar(QLatin1Char('/'))                                   : QChar(QDir::separator());    QTreeWidgetItem *root = new QTreeWidgetItem(ui.treeWidget);    // Try to get something that is easy to read.    QString visiblePath = path;    int index = visiblePath.lastIndexOf(separator);    if (index != -1) {        // try to find a second slash, just to be a bit better.        int index2 = visiblePath.lastIndexOf(separator, index - 1);        if (index2 != -1)            index = index2;        visiblePath = visiblePath.mid(index + 1);        visiblePath = QDir::convertSeparators(visiblePath);    }    root->setText(0, visiblePath.replace(QLatin1String("_"), QLatin1String(" ")));    root->setToolTip(0, path);    foreach(QFileInfo fi, list) {        if (!fi.isFile())            continue;        QTreeWidgetItem *item = new QTreeWidgetItem(root);        item->setText(0, fi.baseName().replace(QLatin1String("_"), QLatin1String(" ")));        item->setData(0, TemplateNameRole, fi.absoluteFilePath());        QTreeWidgetItem *i = ui.treeWidget->currentItem();        if (i == 0) {            ui.treeWidget->setCurrentItem(item);            ui.treeWidget->setItemSelected(item, true);        }    }    ui.treeWidget->setItemExpanded(root, true);}void NewForm::on_openButton_clicked(){    hide();    if (m_workbench->actionManager()->openForm())        close();    else        show();}void NewForm::on_treeWidget_itemPressed(QTreeWidgetItem *item){    if (item && !item->parent())        ui.treeWidget->setItemExpanded(item, !ui.treeWidget->isItemExpanded(item));}

⌨️ 快捷键说明

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