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

📄 mainwindow.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    if (ok)        ok = restoreState(layout_data);    if (!ok) {        QString msg = tr("Error reading %1")                        .arg(fileName);        QMessageBox::warning(this, tr("Error"), msg);        return;    }}QAction *addAction(QMenu *menu, const QString &text, QActionGroup *group, QSignalMapper *mapper,                    int id){    bool first = group->actions().isEmpty();    QAction *result = menu->addAction(text);    result->setCheckable(true);    result->setChecked(first);    group->addAction(result);    QObject::connect(result, SIGNAL(triggered()), mapper, SLOT(map()));    mapper->setMapping(result, id);    return result;}class BlueTitleBar : public QWidget{    Q_OBJECTpublic:    BlueTitleBar(QWidget *parent = 0);    QSize sizeHint() const { return minimumSizeHint(); }    QSize minimumSizeHint() const;protected:    void paintEvent(QPaintEvent *event);    void mousePressEvent(QMouseEvent *event);private:    QPixmap leftPm, centerPm, rightPm;};QSize BlueTitleBar::minimumSizeHint() const{    QDockWidget *dw = qobject_cast<QDockWidget*>(parentWidget());    Q_ASSERT(dw != 0);    QSize result(leftPm.width() + rightPm.width(), centerPm.height());    if (dw->features() & QDockWidget::DockWidgetVerticalTitleBar)        result.transpose();    return result;}BlueTitleBar::BlueTitleBar(QWidget *parent)    : QWidget(parent){    leftPm = QPixmap(":/res/titlebarLeft.png");    centerPm = QPixmap(":/res/titlebarCenter.png");    rightPm = QPixmap(":/res/titlebarRight.png");}void BlueTitleBar::paintEvent(QPaintEvent*){    QPainter painter(this);    QRect rect = this->rect();    QDockWidget *dw = qobject_cast<QDockWidget*>(parentWidget());    Q_ASSERT(dw != 0);    if (dw->features() & QDockWidget::DockWidgetVerticalTitleBar) {        QSize s = rect.size();        s.transpose();        rect.setSize(s);        painter.translate(rect.left(), rect.top() + rect.width());        painter.rotate(-90);        painter.translate(-rect.left(), -rect.top());    }    painter.drawPixmap(rect.topLeft(), leftPm);    painter.drawPixmap(rect.topRight() - QPoint(rightPm.width() - 1, 0), rightPm);    QBrush brush(centerPm);    painter.fillRect(rect.left() + leftPm.width(), rect.top(),                        rect.width() - leftPm.width() - rightPm.width(),                        centerPm.height(), centerPm);}void BlueTitleBar::mousePressEvent(QMouseEvent *event){    QPoint pos = event->pos();    QRect rect = this->rect();    QDockWidget *dw = qobject_cast<QDockWidget*>(parentWidget());    Q_ASSERT(dw != 0);    if (dw->features() & QDockWidget::DockWidgetVerticalTitleBar) {        QPoint p = pos;        pos.setX(rect.left() + rect.bottom() - p.y());        pos.setY(rect.top() + p.x() - rect.left());        QSize s = rect.size();        s.transpose();        rect.setSize(s);    }    const int buttonRight = 7;    const int buttonWidth = 20;    int right = rect.right() - pos.x();    int button = (right - buttonRight)/buttonWidth;    switch (button) {        case 0:            event->accept();            dw->close();            break;        case 1:            event->accept();            dw->setFloating(!dw->isFloating());            break;        case 2: {            event->accept();            QDockWidget::DockWidgetFeatures features = dw->features();            if (features & QDockWidget::DockWidgetVerticalTitleBar)                features &= ~QDockWidget::DockWidgetVerticalTitleBar;            else                features |= QDockWidget::DockWidgetVerticalTitleBar;            dw->setFeatures(features);            break;        }        default:            event->ignore();            break;    }}void MainWindow::setupDockWidgets(const QMap<QString, QSize> &customSizeHints){    mapper = new QSignalMapper(this);    connect(mapper, SIGNAL(mapped(int)), this, SLOT(setCorner(int)));    QMenu *corner_menu = dockWidgetMenu->addMenu(tr("Top left corner"));    QActionGroup *group = new QActionGroup(this);    group->setExclusive(true);    ::addAction(corner_menu, tr("Top dock area"), group, mapper, 0);    ::addAction(corner_menu, tr("Left dock area"), group, mapper, 1);    corner_menu = dockWidgetMenu->addMenu(tr("Top right corner"));    group = new QActionGroup(this);    group->setExclusive(true);    ::addAction(corner_menu, tr("Top dock area"), group, mapper, 2);    ::addAction(corner_menu, tr("Right dock area"), group, mapper, 3);    corner_menu = dockWidgetMenu->addMenu(tr("Bottom left corner"));    group = new QActionGroup(this);    group->setExclusive(true);    ::addAction(corner_menu, tr("Bottom dock area"), group, mapper, 4);    ::addAction(corner_menu, tr("Left dock area"), group, mapper, 5);    corner_menu = dockWidgetMenu->addMenu(tr("Bottom right corner"));    group = new QActionGroup(this);    group->setExclusive(true);    ::addAction(corner_menu, tr("Bottom dock area"), group, mapper, 6);    ::addAction(corner_menu, tr("Right dock area"), group, mapper, 7);    dockWidgetMenu->addSeparator();    static const struct Set {        const char * name;        uint flags;        Qt::DockWidgetArea area;    } sets [] = {#ifndef Q_WS_MAC        { "Black", 0, Qt::LeftDockWidgetArea },#else        { "Black", Qt::Drawer, Qt::LeftDockWidgetArea },#endif        { "White", 0, Qt::RightDockWidgetArea },        { "Red", 0, Qt::TopDockWidgetArea },        { "Green", 0, Qt::TopDockWidgetArea },        { "Blue", 0, Qt::BottomDockWidgetArea },        { "Yellow", 0, Qt::BottomDockWidgetArea }    };    const int setCount = sizeof(sets) / sizeof(Set);    for (int i = 0; i < setCount; ++i) {        ColorSwatch *swatch = new ColorSwatch(tr(sets[i].name), this, Qt::WindowFlags(sets[i].flags));        if (i%2)            swatch->setWindowIcon(QIcon(QPixmap(":/res/qt.png")));        if (qstrcmp(sets[i].name, "Blue") == 0) {            swatch->setTitleBarWidget(new BlueTitleBar(swatch));#ifdef Q_WS_QWS            QPalette pal = palette();            pal.setBrush(backgroundRole(), QColor(0,0,0,0));            swatch->setPalette(pal);#endif        }        QString name = QString::fromLatin1(sets[i].name);        if (customSizeHints.contains(name))            swatch->setCustomSizeHint(customSizeHints.value(name));        addDockWidget(sets[i].area, swatch);        dockWidgetMenu->addMenu(swatch->menu);    }}void MainWindow::setCorner(int id){    switch (id) {        case 0:            QMainWindow::setCorner(Qt::TopLeftCorner, Qt::TopDockWidgetArea);            break;        case 1:            QMainWindow::setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea);            break;        case 2:            QMainWindow::setCorner(Qt::TopRightCorner, Qt::TopDockWidgetArea);            break;        case 3:            QMainWindow::setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea);            break;        case 4:            QMainWindow::setCorner(Qt::BottomLeftCorner, Qt::BottomDockWidgetArea);            break;        case 5:            QMainWindow::setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea);            break;        case 6:            QMainWindow::setCorner(Qt::BottomRightCorner, Qt::BottomDockWidgetArea);            break;        case 7:            QMainWindow::setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea);            break;    }}void MainWindow::switchLayoutDirection(){    if (layoutDirection() == Qt::LeftToRight)        qApp->setLayoutDirection(Qt::RightToLeft);    else        qApp->setLayoutDirection(Qt::LeftToRight);}#include "mainwindow.moc"

⌨️ 快捷键说明

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