亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? imagewindow.cpp

?? C+++GUI Programming with Qt4 的源碼
?? CPP
字號:
#include <QtGui>#include "imagewindow.h"#include "ui_resizedialog.h"ImageWindow::ImageWindow(){    imageLabel = new QLabel;    imageLabel->setBackgroundRole(QPalette::Dark);    imageLabel->setAutoFillBackground(true);    imageLabel->setAlignment(Qt::AlignLeft | Qt::AlignTop);    setCentralWidget(imageLabel);    createActions();    createMenus();    statusBar()->showMessage(tr("Ready"), 2000);    connect(&thread, SIGNAL(transactionStarted(const QString &)),            statusBar(), SLOT(showMessage(const QString &)));    connect(&thread, SIGNAL(finished()),            this, SLOT(allTransactionsDone()));    setCurrentFile("");}void ImageWindow::closeEvent(QCloseEvent *event){    if (maybeSave()) {        event->accept();    } else {        event->ignore();    }}void ImageWindow::open(){    if (maybeSave()) {        QString fileName = QFileDialog::getOpenFileName(this);        if (!fileName.isEmpty())            loadFile(fileName);    }}bool ImageWindow::save(){    if (curFile.isEmpty()) {        return saveAs();    } else {        saveFile(curFile);        return true;    }}bool ImageWindow::saveAs(){    QString fileName = QFileDialog::getSaveFileName(this);    if (QFile::exists(fileName)) {        int r = QMessageBox::warning(this, tr("Image Pro"),                        tr("File %1 already exists.\n"                           "Do you want to overwrite it?")                        .arg(QDir::convertSeparators(fileName)),                        QMessageBox::Yes | QMessageBox::Default,                        QMessageBox::No | QMessageBox::Escape);        if (r == QMessageBox::No)            return true;    }    if (!fileName.isEmpty())        saveFile(fileName);    return true;}void ImageWindow::flipHorizontally(){    addTransaction(new FlipTransaction(Qt::Horizontal));}void ImageWindow::flipVertically(){    addTransaction(new FlipTransaction(Qt::Vertical));}void ImageWindow::resizeImage(){    QDialog dialog;    Ui::ResizeDialog ui;    ui.setupUi(&dialog);    ui.widthSpinBox->setValue(imageLabel->pixmap()->width());    ui.heightSpinBox->setValue(imageLabel->pixmap()->height());    if (dialog.exec()) {        QSize newSize(ui.widthSpinBox->value(),                      ui.heightSpinBox->value());        addTransaction(new ResizeTransaction(newSize));    }}void ImageWindow::convertTo32Bit(){    addTransaction(new ConvertDepthTransaction(32));}void ImageWindow::convertTo8Bit(){    addTransaction(new ConvertDepthTransaction(8));}void ImageWindow::convertTo1Bit(){    addTransaction(new ConvertDepthTransaction(1));}void ImageWindow::addTransaction(Transaction *transact){    thread.addTransaction(transact);    openAction->setEnabled(false);    saveAction->setEnabled(false);    saveAsAction->setEnabled(false);}void ImageWindow::about(){    QMessageBox::about(this, tr("About Image Pro"),            tr("<h2>Image Pro 1.1</h2>"               "<p>Copyright &copy; 2006 Software Inc."               "<p>Image Pro is a small application that demonstrates "               "signal-slot connections across threads."));}void ImageWindow::allTransactionsDone(){    openAction->setEnabled(true);    saveAction->setEnabled(true);    saveAsAction->setEnabled(true);    imageLabel->setPixmap(QPixmap::fromImage(thread.image()));    setWindowModified(true);    statusBar()->showMessage(tr("Ready"), 2000);}void ImageWindow::createActions(){    openAction = new QAction(tr("&Open..."), this);    openAction->setShortcut(tr("Ctrl+O"));    openAction->setStatusTip(tr("Open an existing image file"));    connect(openAction, SIGNAL(triggered()), this, SLOT(open()));    saveAction = new QAction(tr("&Save"), this);    saveAction->setShortcut(tr("Ctrl+S"));    saveAction->setStatusTip(tr("Save the image to disk"));    connect(saveAction, SIGNAL(triggered()), this, SLOT(save()));    saveAsAction = new QAction(tr("Save &As..."), this);    saveAsAction->setStatusTip(tr("Save the image under a new name"));    connect(saveAsAction, SIGNAL(triggered()), this, SLOT(saveAs()));    exitAction = new QAction(tr("E&xit"), this);    exitAction->setShortcut(tr("Ctrl+Q"));    exitAction->setStatusTip(tr("Exit the application"));    connect(exitAction, SIGNAL(triggered()), this, SLOT(close()));    flipHorizontallyAction = new QAction(tr("Flip &Horizontally"),                                         this);    flipHorizontallyAction->setShortcut(tr("Ctrl+H"));    flipHorizontallyAction->setStatusTip(tr("Flip the image "                                         "horizontally"));    connect(flipHorizontallyAction, SIGNAL(triggered()),            this, SLOT(flipHorizontally()));    flipVerticallyAction = new QAction(tr("Flip &Vertically"), this);    flipVerticallyAction->setShortcut(tr("Ctrl+V"));    flipVerticallyAction->setStatusTip(tr("Flip the image vertically"));    connect(flipVerticallyAction, SIGNAL(triggered()),            this, SLOT(flipVertically()));    resizeAction = new QAction(tr("&Resize..."), this);    resizeAction->setShortcut(tr("Ctrl+R"));    resizeAction->setStatusTip(tr("Resize the image"));    connect(resizeAction, SIGNAL(triggered()),            this, SLOT(resizeImage()));    convertTo32BitAction = new QAction(tr("32 Bit"), this);    convertTo32BitAction->setStatusTip(tr("Convert to 32-bit image"));    connect(convertTo32BitAction, SIGNAL(triggered()),            this, SLOT(convertTo32Bit()));    convertTo8BitAction = new QAction(tr("8 Bit"), this);    convertTo8BitAction->setStatusTip(tr("Convert to 8-bit image"));    connect(convertTo8BitAction, SIGNAL(triggered()),            this, SLOT(convertTo8Bit()));    convertTo1BitAction = new QAction(tr("1 Bit"), this);    convertTo1BitAction->setStatusTip(tr("Convert to 1-bit image"));    connect(convertTo1BitAction, SIGNAL(triggered()),            this, SLOT(convertTo1Bit()));    aboutAction = new QAction(tr("&About"), this);    aboutAction->setStatusTip(tr("Show the application's About box"));    connect(aboutAction, SIGNAL(triggered()), this, SLOT(about()));    aboutQtAction = new QAction(tr("About &Qt"), this);    aboutQtAction->setStatusTip(tr("Show the Qt library's About box"));    connect(aboutQtAction, SIGNAL(triggered()), qApp, SLOT(aboutQt()));}void ImageWindow::createMenus(){    fileMenu = menuBar()->addMenu(tr("&File"));    fileMenu->addAction(openAction);    fileMenu->addAction(saveAction);    fileMenu->addAction(saveAsAction);    fileMenu->addSeparator();    fileMenu->addAction(exitAction);    editMenu = menuBar()->addMenu(tr("&Edit"));    editMenu->addAction(flipHorizontallyAction);    editMenu->addAction(flipVerticallyAction);    editMenu->addAction(resizeAction);    editMenu->addSeparator();    convertToSubMenu = editMenu->addMenu(tr("&Convert to"));    convertToSubMenu->addAction(convertTo32BitAction);    convertToSubMenu->addAction(convertTo8BitAction);    convertToSubMenu->addAction(convertTo1BitAction);    menuBar()->addSeparator();    helpMenu = menuBar()->addMenu(tr("&Help"));    helpMenu->addAction(aboutAction);    helpMenu->addAction(aboutQtAction);}bool ImageWindow::maybeSave(){    if (isWindowModified()) {        int r = QMessageBox::warning(this, tr("Image Pro"),                        tr("The image has been modified.\n"                           "Do you want to save your changes?"),                        QMessageBox::Yes | QMessageBox::Default,                        QMessageBox::No,                        QMessageBox::Cancel | QMessageBox::Escape);        if (r == QMessageBox::Yes) {            return save();        } else if (r == QMessageBox::Cancel) {            return false;        }    }    return true;}void ImageWindow::loadFile(const QString &fileName){    QImage newImage;    QApplication::setOverrideCursor(Qt::WaitCursor);    bool loaded = newImage.load(fileName);    QApplication::restoreOverrideCursor();    if (loaded) {        thread.setImage(newImage);        imageFormat = QImageReader::imageFormat(fileName);        imageLabel->setPixmap(QPixmap::fromImage(newImage));        setCurrentFile(fileName);        statusBar()->showMessage(tr("File loaded"), 2000);    } else {        QMessageBox::warning(this, tr("Image Pro"),                             tr("Error when loading image."));        statusBar()->showMessage(tr("Loading canceled"), 2000);    }}void ImageWindow::saveFile(const QString &fileName){    QImage image = thread.image();    QApplication::setOverrideCursor(Qt::WaitCursor);    bool saved = image.save(fileName, imageFormat);    QApplication::restoreOverrideCursor();    if (saved) {        setCurrentFile(fileName);        statusBar()->showMessage(tr("File saved"), 2000);    } else {        statusBar()->showMessage(tr("Saving canceled"), 2000);    }}void ImageWindow::setCurrentFile(const QString &fileName){    curFile = fileName;    setWindowModified(false);    bool hasImage = !curFile.isEmpty();    if (hasImage) {        setWindowTitle(tr("%1[*] - %2").arg(strippedName(curFile))                                       .arg(tr("Image Pro")));    } else {        setWindowTitle(tr("Image Pro"));    }    saveAction->setEnabled(hasImage);    saveAsAction->setEnabled(hasImage);    flipHorizontallyAction->setEnabled(hasImage);    flipVerticallyAction->setEnabled(hasImage);    resizeAction->setEnabled(hasImage);    convertTo32BitAction->setEnabled(hasImage);    convertTo8BitAction->setEnabled(hasImage);    convertTo1BitAction->setEnabled(hasImage);}QString ImageWindow::strippedName(const QString &fullFileName){    return QFileInfo(fullFileName).fileName();}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品久久人人爱蜜臀 | 午夜天堂影视香蕉久久| 日本一区二区三区四区在线视频 | 国产欧美视频一区二区| 欧美日韩精品一区二区| 欧美日韩国产免费一区二区| 欧美一区二区三区免费视频| 欧美一区二区三区免费观看视频| 日韩精品中文字幕一区二区三区 | 国产网红主播福利一区二区| 国产欧美日韩亚州综合| 精品久久久久久无| 欧美性生活一区| 777午夜精品视频在线播放| 久久久国际精品| 亚洲午夜一区二区| 精品一区二区三区不卡| 在线观看国产91| 日本一区二区三区视频视频| 亚洲综合清纯丝袜自拍| 精品影视av免费| 在线观看亚洲专区| 欧美三级电影网| 国产精品美女www爽爽爽| 亚洲一区二区在线播放相泽| 国产一区福利在线| 91精品在线观看入口| 久久久www成人免费无遮挡大片 | 中文字幕亚洲一区二区va在线| 青青草97国产精品免费观看 | 99国产精品久久| 欧美国产视频在线| 懂色av噜噜一区二区三区av | 老司机一区二区| 日韩视频一区在线观看| 奇米综合一区二区三区精品视频| 色妹子一区二区| 一区二区免费看| 一本色道久久加勒比精品| 国产精品久久久久一区| 91亚洲午夜精品久久久久久| 欧美国产乱子伦| 国产99精品视频| 亚洲日本欧美天堂| 欧美在线影院一区二区| 中文在线一区二区| 色就色 综合激情| 国产真实乱子伦精品视频| 国产人妖乱国产精品人妖| 国产风韵犹存在线视精品| 亚洲欧美一区二区三区久本道91| 欧美三级电影网站| 国产成人精品一区二区三区四区| 精品捆绑美女sm三区| 粉嫩欧美一区二区三区高清影视| 亚洲女与黑人做爰| 精品国产一区二区三区av性色| 国产91高潮流白浆在线麻豆| 亚洲国产综合在线| 国产精品美女久久久久久久 | 777奇米四色成人影色区| 国产一二精品视频| 午夜精品视频一区| 国产精品三级av| 久久精品亚洲一区二区三区浴池| 欧美日韩一区二区三区高清| 成人h动漫精品一区二区| 天堂影院一区二区| 午夜欧美在线一二页| 亚洲欧美日韩成人高清在线一区| 国产午夜精品久久久久久久| 91搞黄在线观看| 色偷偷一区二区三区| 成人av在线网站| 国产精品资源在线看| 国内精品伊人久久久久av一坑| 免费的成人av| 国产成人午夜精品5599 | 国产精品日韩精品欧美在线| 欧美mv和日韩mv国产网站| 日韩你懂的在线播放| 久久午夜免费电影| 欧美成人性福生活免费看| 精品视频一区二区三区免费| 色综合天天性综合| 日韩欧美中文一区二区| 欧美无人高清视频在线观看| 欧美亚州韩日在线看免费版国语版| 欧洲人成人精品| 久久免费视频一区| 亚洲情趣在线观看| 久久国产精品99久久人人澡| 风流少妇一区二区| 在线观看视频一区二区| 日韩免费视频线观看| 亚洲电影一级片| 成人app下载| 久久亚洲精华国产精华液| 亚洲乱码中文字幕| 极品少妇xxxx精品少妇| 欧美日韩三级在线| 亚洲男人的天堂网| 成人免费不卡视频| 日韩你懂的在线观看| 亚洲一区二区在线免费看| www.亚洲在线| 国产精品久久久久久亚洲毛片| 亚洲成人高清在线| 欧美日韩国产综合久久| 精品国产乱码久久久久久图片 | 韩国视频一区二区| 96av麻豆蜜桃一区二区| 日本一区二区三区dvd视频在线| 秋霞午夜av一区二区三区| 3d成人h动漫网站入口| 美脚の诱脚舐め脚责91| 色综合久久久久综合| 欧美不卡一区二区三区| 国产一区二区三区免费在线观看 | 国产日韩高清在线| 风间由美一区二区三区在线观看| 久久精品在线免费观看| 成人激情av网| 亚洲成av人影院| 久久综合九色综合欧美亚洲| 国产69精品久久久久777| 亚洲免费观看高清完整| 日韩久久久精品| 欧美日韩久久不卡| 国产99久久久久久免费看农村| 亚洲精品国产a| 欧美精品久久天天躁| 久久99热这里只有精品| 欧美国产成人精品| 欧美日韩一区不卡| 91亚洲大成网污www| 国产精品久线观看视频| 欧美成人精品二区三区99精品| 色国产综合视频| 99久久久免费精品国产一区二区| 国产欧美综合在线观看第十页 | 国产无遮挡一区二区三区毛片日本| 成人app在线观看| 韩国av一区二区三区| 天天综合色天天综合色h| 18涩涩午夜精品.www| 欧美高清性hdvideosex| 91浏览器入口在线观看| 激情综合网av| 成人午夜视频在线观看| 国产91精品一区二区麻豆亚洲| 免费观看91视频大全| 国产成人一区二区精品非洲| 日本丰满少妇一区二区三区| 欧美日韩国产精品成人| 久久噜噜亚洲综合| 国产精品久久夜| 午夜精品视频一区| 国产精品主播直播| 欧美日韩一区二区三区视频| 日韩一区二区三区在线| 亚洲人成7777| 免费在线观看一区二区三区| 久草中文综合在线| 欧美色区777第一页| 国产精品麻豆99久久久久久| 午夜av一区二区三区| 色一区在线观看| 国产三区在线成人av| 日本欧美一区二区| 欧美日本乱大交xxxxx| 亚洲天堂精品在线观看| 国产一区二区精品在线观看| 欧美理论在线播放| 午夜精品久久久久久久蜜桃app| 风间由美一区二区av101 | 中文字幕av一区二区三区高| 久久99最新地址| 久久精品一区蜜桃臀影院| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧美天天综合网| 日欧美一区二区| 日韩视频一区二区三区在线播放| 午夜欧美一区二区三区在线播放| 91玉足脚交白嫩脚丫在线播放| 国产精品伦理在线| 一本大道久久a久久综合| 亚洲一区在线免费观看| 91精品久久久久久久99蜜桃 | 日韩欧美国产麻豆| 天天爽夜夜爽夜夜爽精品视频| 91福利国产成人精品照片| 视频一区欧美日韩| 中文字幕第一区| 91精品国产91久久综合桃花| 国产精品一级二级三级| 亚洲人xxxx| 精品国产乱码久久久久久图片| 成人夜色视频网站在线观看| 亚洲激情在线播放|