• QT中Dialog的使用(使用QStackedWidget维护页面切换)


    先看看效果图:

    imageimageimage

    pages.h

    #ifndef PAGES_H
    #define PAGES_H
    
    #include <QWidget>
    
    class ConfigurationPage : public QWidget
    {
    public:
        ConfigurationPage(QWidget *parent = 0);
    };
    
    class QueryPage : public QWidget
    {
    public:
        QueryPage(QWidget *parent = 0);
    };
    
    class UpdatePage : public QWidget
    {
    public:
        UpdatePage(QWidget *parent = 0);
    };
    
    #endif
    

    pages.cpp

    #include <QtGui>
    
    #include "pages.h"
    
    ConfigurationPage::ConfigurationPage(QWidget *parent)
        : QWidget(parent)
    {
        QGroupBox *configGroup = new QGroupBox(tr("Server configuration"));
    
        QLabel *serverLabel = new QLabel(tr("Server:"));
        QComboBox *serverCombo = new QComboBox;
        serverCombo->addItem(tr("Qt (Australia)"));
        serverCombo->addItem(tr("Qt (Germany)"));
        serverCombo->addItem(tr("Qt (Norway)"));
        serverCombo->addItem(tr("Qt (People's Republic of China)"));
        serverCombo->addItem(tr("Qt (USA)"));
    
        QHBoxLayout *serverLayout = new QHBoxLayout;
        serverLayout->addWidget(serverLabel);
        serverLayout->addWidget(serverCombo);
    
        QVBoxLayout *configLayout = new QVBoxLayout;
        configLayout->addLayout(serverLayout);
        configGroup->setLayout(configLayout);
    
        QVBoxLayout *mainLayout = new QVBoxLayout;
        mainLayout->addWidget(configGroup);
        mainLayout->addStretch(1);
        setLayout(mainLayout);
    }
    
    UpdatePage::UpdatePage(QWidget *parent)
        : QWidget(parent)
    {
        QGroupBox *updateGroup = new QGroupBox(tr("Package selection"));
        QCheckBox *systemCheckBox = new QCheckBox(tr("Update system"));
        QCheckBox *appsCheckBox = new QCheckBox(tr("Update applications"));
        QCheckBox *docsCheckBox = new QCheckBox(tr("Update documentation"));
    
        QGroupBox *packageGroup = new QGroupBox(tr("Existing packages"));
    
        QListWidget *packageList = new QListWidget;
        QListWidgetItem *qtItem = new QListWidgetItem(packageList);
        qtItem->setText(tr("Qt"));
        QListWidgetItem *qsaItem = new QListWidgetItem(packageList);
        qsaItem->setText(tr("QSA"));
        QListWidgetItem *teamBuilderItem = new QListWidgetItem(packageList);
        teamBuilderItem->setText(tr("Teambuilder"));
    
        QPushButton *startUpdateButton = new QPushButton(tr("Start update"));
    
        QVBoxLayout *updateLayout = new QVBoxLayout;
        updateLayout->addWidget(systemCheckBox);
        updateLayout->addWidget(appsCheckBox);
        updateLayout->addWidget(docsCheckBox);
        updateGroup->setLayout(updateLayout);
    
        QVBoxLayout *packageLayout = new QVBoxLayout;
        packageLayout->addWidget(packageList);
        packageGroup->setLayout(packageLayout);
    
        QVBoxLayout *mainLayout = new QVBoxLayout;
        mainLayout->addWidget(updateGroup);
        mainLayout->addWidget(packageGroup);
        mainLayout->addSpacing(12);
        mainLayout->addWidget(startUpdateButton);
        mainLayout->addStretch(1);
        setLayout(mainLayout);
    }
    
    QueryPage::QueryPage(QWidget *parent)
        : QWidget(parent)
    {
        QGroupBox *packagesGroup = new QGroupBox(tr("Look for packages"));
    
        QLabel *nameLabel = new QLabel(tr("Name:"));
        QLineEdit *nameEdit = new QLineEdit;
    
        QLabel *dateLabel = new QLabel(tr("Released after:"));
        QDateTimeEdit *dateEdit = new QDateTimeEdit(QDate::currentDate());
    
        QCheckBox *releasesCheckBox = new QCheckBox(tr("Releases"));
        QCheckBox *upgradesCheckBox = new QCheckBox(tr("Upgrades"));
    
        QSpinBox *hitsSpinBox = new QSpinBox;
        hitsSpinBox->setPrefix(tr("Return up to "));
        hitsSpinBox->setSuffix(tr(" results"));
        hitsSpinBox->setSpecialValueText(tr("Return only the first result"));
        hitsSpinBox->setMinimum(1);
        hitsSpinBox->setMaximum(100);
        hitsSpinBox->setSingleStep(10);
    
        QPushButton *startQueryButton = new QPushButton(tr("Start query"));
    
        QGridLayout *packagesLayout = new QGridLayout;
        packagesLayout->addWidget(nameLabel, 0, 0);
        packagesLayout->addWidget(nameEdit, 0, 1);
        packagesLayout->addWidget(dateLabel, 1, 0);
        packagesLayout->addWidget(dateEdit, 1, 1);
        packagesLayout->addWidget(releasesCheckBox, 2, 0);
        packagesLayout->addWidget(upgradesCheckBox, 3, 0);
        packagesLayout->addWidget(hitsSpinBox, 4, 0, 1, 2);
        packagesGroup->setLayout(packagesLayout);
    
        QVBoxLayout *mainLayout = new QVBoxLayout;
        mainLayout->addWidget(packagesGroup);
        mainLayout->addSpacing(12);
        mainLayout->addWidget(startQueryButton);
        mainLayout->addStretch(1);
        setLayout(mainLayout);
    }
    

    ConfigDialog.h

    #ifndef CONFIGDIALOG_H
    #define CONFIGDIALOG_H
    
    #include <QDialog>
    
    QT_BEGIN_NAMESPACE
    class QListWidget;
    class QListWidgetItem;
    class QStackedWidget;
    QT_END_NAMESPACE
    
    class ConfigDialog : public QDialog
    {
        Q_OBJECT
    
    public:
        ConfigDialog();
    
    public slots:
        void changePage(QListWidgetItem *current, QListWidgetItem *previous);
    
    private:
        void createIcons();
    
        QListWidget *contentsWidget;
        QStackedWidget *pagesWidget;
    };
    
    #endif
    

    ConfigDialog.cpp

    #include <QtGui>
    
    #include "configdialog.h"
    #include "pages.h"
    
    ConfigDialog::ConfigDialog()
    {
        contentsWidget = new QListWidget;
        contentsWidget->setViewMode(QListView::IconMode);
        contentsWidget->setIconSize(QSize(96, 84));
        contentsWidget->setMovement(QListView::Static);
        contentsWidget->setMaximumWidth(128);
        contentsWidget->setSpacing(12);
    
        pagesWidget = new QStackedWidget;
        pagesWidget->addWidget(new ConfigurationPage);
        pagesWidget->addWidget(new UpdatePage);
        pagesWidget->addWidget(new QueryPage);
    
        QPushButton *closeButton = new QPushButton(tr("Close"));
    
        createIcons();
        contentsWidget->setCurrentRow(0);
    
        connect(closeButton, SIGNAL(clicked()), this, SLOT(close()));
    
        QHBoxLayout *horizontalLayout = new QHBoxLayout;
        horizontalLayout->addWidget(contentsWidget);
        horizontalLayout->addWidget(pagesWidget, 1);
    
        QHBoxLayout *buttonsLayout = new QHBoxLayout;
        buttonsLayout->addStretch(1);
        buttonsLayout->addWidget(closeButton);
    
        QVBoxLayout *mainLayout = new QVBoxLayout;
        mainLayout->addLayout(horizontalLayout);
        mainLayout->addStretch(1);
        mainLayout->addSpacing(12);
        mainLayout->addLayout(buttonsLayout);
        setLayout(mainLayout);
    
        setWindowTitle(tr("Config Dialog"));
    }
    
    void ConfigDialog::createIcons()
    {
        QListWidgetItem *configButton = new QListWidgetItem(contentsWidget);
        configButton->setIcon(QIcon(":/images/config.png"));
        configButton->setText(tr("Configuration"));
        configButton->setTextAlignment(Qt::AlignHCenter);
        configButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
    
        QListWidgetItem *updateButton = new QListWidgetItem(contentsWidget);
        updateButton->setIcon(QIcon(":/images/update.png"));
        updateButton->setText(tr("Update"));
        updateButton->setTextAlignment(Qt::AlignHCenter);
        updateButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
    
        QListWidgetItem *queryButton = new QListWidgetItem(contentsWidget);
        queryButton->setIcon(QIcon(":/images/query.png"));
        queryButton->setText(tr("Query"));
        queryButton->setTextAlignment(Qt::AlignHCenter);
        queryButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
    
        connect(contentsWidget,
                SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)),
                this, SLOT(changePage(QListWidgetItem*,QListWidgetItem*)));
    }
    
    void ConfigDialog::changePage(QListWidgetItem *current, QListWidgetItem *previous)
    {
        if (!current)
            current = previous;
    
        pagesWidget->setCurrentIndex(contentsWidget->row(current));
    }
    

    main.cpp

    #include <QApplication>
    
    #include "configdialog.h"
    
    int main(int argc, char *argv[])
    {
        Q_INIT_RESOURCE(configdialog);
    
        QApplication app(argc, argv);
        ConfigDialog dialog;
        return dialog.exec();
    }
    

    http://www.cnblogs.com/rollenholt/archive/2012/04/14/2446806.html

  • 相关阅读:
    第十二课:复习课一
    第十一课:磁场和洛伦兹力
    关于 求 曲面 短程线
    二元函数 的 极值点 怎么求 ?
    给 学生党 出一道题 : 斯涅耳定理 的 增强版
    极坐标系 : 一生只做一件事
    代数几何 定理 合集
    代数几何 很难 吗 ?
    看了一下 复变函数 黎曼曲面 流形 复流形 仿射空间 射影空间
    物空必能 先生 的 绝对速度 是 一种 “约化速度”
  • 原文地址:https://www.cnblogs.com/findumars/p/6375423.html
Copyright © 2020-2023  润新知