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

📄 mainwindow.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
字号:
/******************************************************************************** Copyright (C) 2005-2006 Trolltech ASA. All rights reserved.**** This file is part of the example classes 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 <QtGui>#include "iconpreviewarea.h"#include "iconsizespinbox.h"#include "imagedelegate.h"#include "mainwindow.h"MainWindow::MainWindow(){    centralWidget = new QWidget;    setCentralWidget(centralWidget);    createPreviewGroupBox();    createImagesGroupBox();    createIconSizeGroupBox();    createActions();    createMenus();    createContextMenu();    QGridLayout *mainLayout = new QGridLayout;    mainLayout->addWidget(imagesGroupBox, 0, 0);    mainLayout->addWidget(iconSizeGroupBox, 1, 0);    mainLayout->addWidget(previewGroupBox, 0, 1, 2, 1);    centralWidget->setLayout(mainLayout);    setWindowTitle(tr("Icons"));    checkCurrentStyle();    otherRadioButton->click();    resize(860, 400);}void MainWindow::about(){    QMessageBox::about(this, tr("About Icons"),            tr("The <b>Icons</b> example illustrates how Qt renders an icon in "               "different modes (active, normal, and disabled) and states (on "               "and off) based on a set of images."));}void MainWindow::changeStyle(bool checked){    if (!checked)        return;    QAction *action = qobject_cast<QAction *>(sender());    QStyle *style = QStyleFactory::create(action->data().toString());    Q_ASSERT(style);    QApplication::setStyle(style);    smallRadioButton->setText(tr("Small (%1 x %1)")            .arg(style->pixelMetric(QStyle::PM_SmallIconSize)));    largeRadioButton->setText(tr("Large (%1 x %1)")            .arg(style->pixelMetric(QStyle::PM_LargeIconSize)));    toolBarRadioButton->setText(tr("Toolbars (%1 x %1)")            .arg(style->pixelMetric(QStyle::PM_ToolBarIconSize)));    listViewRadioButton->setText(tr("List views (%1 x %1)")            .arg(style->pixelMetric(QStyle::PM_ListViewIconSize)));    iconViewRadioButton->setText(tr("Icon views (%1 x %1)")            .arg(style->pixelMetric(QStyle::PM_IconViewIconSize)));    changeSize();}void MainWindow::changeSize(){    int extent;    if (otherRadioButton->isChecked()) {        extent = otherSpinBox->value();    } else {        QStyle::PixelMetric metric;        if (smallRadioButton->isChecked()) {            metric = QStyle::PM_SmallIconSize;        } else if (largeRadioButton->isChecked()) {            metric = QStyle::PM_LargeIconSize;        } else if (toolBarRadioButton->isChecked()) {            metric = QStyle::PM_ToolBarIconSize;        } else if (listViewRadioButton->isChecked()) {            metric = QStyle::PM_ListViewIconSize;        } else {            metric = QStyle::PM_IconViewIconSize;        }        extent = QApplication::style()->pixelMetric(metric);    }    previewArea->setSize(QSize(extent, extent));    otherSpinBox->setEnabled(otherRadioButton->isChecked());}void MainWindow::changeIcon(){    QIcon icon;    for (int row = 0; row < imagesTable->rowCount(); ++row) {        QTableWidgetItem *item0 = imagesTable->item(row, 0);        QTableWidgetItem *item1 = imagesTable->item(row, 1);        QTableWidgetItem *item2 = imagesTable->item(row, 2);        if (item0->checkState() == Qt::Checked) {            QIcon::Mode mode;            if (item1->text() == tr("Normal")) {                mode = QIcon::Normal;            } else if (item1->text() == tr("Active")) {                mode = QIcon::Active;            } else {                mode = QIcon::Disabled;            }            QIcon::State state;            if (item2->text() == tr("On")) {                state = QIcon::On;            } else {                state = QIcon::Off;            }            QString fileName = item0->data(Qt::UserRole).toString();            QImage image(fileName);            if (!image.isNull())                icon.addPixmap(QPixmap::fromImage(image), mode, state);        }    }    previewArea->setIcon(icon);}void MainWindow::addImage(){    QStringList fileNames = QFileDialog::getOpenFileNames(this,                                    tr("Open Images"), "",                                    tr("Images (*.png *.xpm *.jpg);;"                                       "All Files (*)"));    if (!fileNames.isEmpty()) {        foreach (QString fileName, fileNames) {            int row = imagesTable->rowCount();            imagesTable->setRowCount(row + 1);            QString imageName = QFileInfo(fileName).baseName();            QTableWidgetItem *item0 = new QTableWidgetItem(imageName);            item0->setData(Qt::UserRole, fileName);            item0->setFlags(item0->flags() & ~Qt::ItemIsEditable);            QTableWidgetItem *item1 = new QTableWidgetItem(tr("Normal"));            QTableWidgetItem *item2 = new QTableWidgetItem(tr("Off"));            if (guessModeStateAct->isChecked()) {                if (fileName.contains("_act")) {                    item1->setText(tr("Active"));                } else if (fileName.contains("_dis")) {                    item1->setText(tr("Disabled"));                }                if (fileName.contains("_on"))                    item2->setText(tr("On"));            }            imagesTable->setItem(row, 0, item0);            imagesTable->setItem(row, 1, item1);            imagesTable->setItem(row, 2, item2);            imagesTable->openPersistentEditor(item1);            imagesTable->openPersistentEditor(item2);            item0->setCheckState(Qt::Checked);        }    }}void MainWindow::removeAllImages(){    imagesTable->setRowCount(0);    changeIcon();}void MainWindow::createPreviewGroupBox(){    previewGroupBox = new QGroupBox(tr("Preview"));    previewArea = new IconPreviewArea;    QVBoxLayout *layout = new QVBoxLayout;    layout->addWidget(previewArea);    previewGroupBox->setLayout(layout);}void MainWindow::createImagesGroupBox(){    imagesGroupBox = new QGroupBox(tr("Images"));    imagesGroupBox->setSizePolicy(QSizePolicy::Expanding,                                  QSizePolicy::Expanding);    QStringList labels;    labels << tr("Image") << tr("Mode") << tr("State");    imagesTable = new QTableWidget;    imagesTable->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Ignored);    imagesTable->setSelectionMode(QAbstractItemView::NoSelection);    imagesTable->setColumnCount(3);    imagesTable->setHorizontalHeaderLabels(labels);    imagesTable->setItemDelegate(new ImageDelegate(this));    imagesTable->horizontalHeader()->resizeSection(0, 160);    imagesTable->horizontalHeader()->resizeSection(1, 80);    imagesTable->horizontalHeader()->resizeSection(2, 80);    imagesTable->verticalHeader()->hide();    connect(imagesTable, SIGNAL(itemChanged(QTableWidgetItem *)),            this, SLOT(changeIcon()));    QVBoxLayout *layout = new QVBoxLayout;    layout->addWidget(imagesTable);    imagesGroupBox->setLayout(layout);}void MainWindow::createIconSizeGroupBox(){    iconSizeGroupBox = new QGroupBox(tr("Icon Size"));    smallRadioButton = new QRadioButton;    largeRadioButton = new QRadioButton;    toolBarRadioButton = new QRadioButton;    listViewRadioButton = new QRadioButton;    iconViewRadioButton = new QRadioButton;    otherRadioButton = new QRadioButton(tr("Other:"));    otherSpinBox = new IconSizeSpinBox;    otherSpinBox->setRange(8, 128);    otherSpinBox->setValue(64);    connect(toolBarRadioButton, SIGNAL(toggled(bool)),            this, SLOT(changeSize()));    connect(listViewRadioButton, SIGNAL(toggled(bool)),            this, SLOT(changeSize()));    connect(iconViewRadioButton, SIGNAL(toggled(bool)),            this, SLOT(changeSize()));    connect(smallRadioButton, SIGNAL(toggled(bool)), this, SLOT(changeSize()));    connect(largeRadioButton, SIGNAL(toggled(bool)), this, SLOT(changeSize()));    connect(otherRadioButton, SIGNAL(toggled(bool)), this, SLOT(changeSize()));    connect(otherSpinBox, SIGNAL(valueChanged(int)), this, SLOT(changeSize()));    QHBoxLayout *otherSizeLayout = new QHBoxLayout;    otherSizeLayout->addWidget(otherRadioButton);    otherSizeLayout->addWidget(otherSpinBox);    QGridLayout *layout = new QGridLayout;    layout->addWidget(smallRadioButton, 0, 0);    layout->addWidget(largeRadioButton, 1, 0);    layout->addWidget(toolBarRadioButton, 2, 0);    layout->addWidget(listViewRadioButton, 0, 1);    layout->addWidget(iconViewRadioButton, 1, 1);    layout->addLayout(otherSizeLayout, 2, 1);    iconSizeGroupBox->setLayout(layout);}void MainWindow::createActions(){    addImageAct = new QAction(tr("&Add Image..."), this);    addImageAct->setShortcut(tr("Ctrl+A"));    connect(addImageAct, SIGNAL(triggered()), this, SLOT(addImage()));    removeAllImagesAct = new QAction(tr("&Remove All Images"), this);    removeAllImagesAct->setShortcut(tr("Ctrl+R"));    connect(removeAllImagesAct, SIGNAL(triggered()),            this, SLOT(removeAllImages()));    exitAct = new QAction(tr("&Quit"), this);    exitAct->setShortcut(tr("Ctrl+Q"));    connect(exitAct, SIGNAL(triggered()), this, SLOT(close()));    styleActionGroup = new QActionGroup(this);    foreach (QString styleName, QStyleFactory::keys()) {        QAction *action = new QAction(styleActionGroup);        action->setText(tr("%1 Style").arg(styleName));        action->setData(styleName);        action->setCheckable(true);        connect(action, SIGNAL(triggered(bool)), this, SLOT(changeStyle(bool)));    }    guessModeStateAct = new QAction(tr("&Guess Image Mode/State"), this);    guessModeStateAct->setCheckable(true);    guessModeStateAct->setChecked(true);    aboutAct = new QAction(tr("&About"), this);    connect(aboutAct, SIGNAL(triggered()), this, SLOT(about()));    aboutQtAct = new QAction(tr("About &Qt"), this);    connect(aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt()));}void MainWindow::createMenus(){    fileMenu = menuBar()->addMenu(tr("&File"));    fileMenu->addAction(addImageAct);    fileMenu->addAction(removeAllImagesAct);    fileMenu->addSeparator();    fileMenu->addAction(exitAct);    viewMenu = menuBar()->addMenu(tr("&View"));    foreach (QAction *action, styleActionGroup->actions())        viewMenu->addAction(action);    viewMenu->addSeparator();    viewMenu->addAction(guessModeStateAct);    menuBar()->addSeparator();    helpMenu = menuBar()->addMenu(tr("&Help"));    helpMenu->addAction(aboutAct);    helpMenu->addAction(aboutQtAct);}void MainWindow::createContextMenu(){    imagesTable->setContextMenuPolicy(Qt::ActionsContextMenu);    imagesTable->addAction(addImageAct);    imagesTable->addAction(removeAllImagesAct);}void MainWindow::checkCurrentStyle(){    foreach (QAction *action, styleActionGroup->actions()) {        QString styleName = action->data().toString();        QStyle *candidate = QStyleFactory::create(styleName);        Q_ASSERT(candidate);        if (candidate->metaObject()->className()                == QApplication::style()->metaObject()->className()) {            action->trigger();            return;        }        delete candidate;    }}

⌨️ 快捷键说明

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