QT中Dialog的使用(使用QStackedWidget维护页面切换)
阅读原文时间:2023年07月13日阅读:2

先看看效果图:

pages.h

#ifndef PAGES_H
#define PAGES_H

#include

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

#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

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

#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

#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

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章