zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    使用JDBC连接MySql时出现:The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration
    Mysql Lost connection to MySQL server at ‘reading initial communication packet', system error: 0
    mysql-基本命令
    C# 监听值的变化
    DataGrid样式
    C# 获取当前日期时间
    C# 中生成随机数
    递归和迭代
    PHP 时间转几分几秒
    PHP 根据整数ID,生成唯一字符串
  • 原文地址:https://www.cnblogs.com/findumars/p/6375423.html
Copyright © 2011-2022 走看看