QT中Dialog的使用
2012-04-14 10:06
399 查看
先看看效果图:
pages.h
pages.cpp
ConfigDialog.h
ConfigDialog.cpp
main.cpp
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(); }
相关文章推荐
- qt中对任务繁忙时QProgressDialog的使用
- Qt实用技巧:界面切换使用Dialog全屏切换
- Qt Widget和Dialog区别和使用,QWidget一闪而过
- Qt中常见对话框的使用/QMessageBox/QFontDialog/QFileDialog
- Qt4.8 使用SLOT/SIGNAL函数传递变量进Dialog #Qt
- QProgressDialog使用时不显示的可能问题 #Qt #C++
- QT中Dialog的使用(使用QStackedWidget维护页面切换)
- Qt 学习笔记--------------------使用纯代码写dialog 与 UI文件
- Qt QColorDialog QErrorMessage QFileDialog QFontDialog QProgressDialog 等对话框的使用测试
- Android之TimePickerDialog使用
- qt 使用资源例子
- jquery popupDialog 使用 加载jsp页面的方法
- qt 做界面时怎样不使用布局实现最大化
- 在QT中使用超链接
- QT5.2 Android App中使用QML文件
- showModalDialog()、 showModelessDialog()方法使用详解
- android自定义dialog,添加了selector和shape混合使用
- [Qt]QProgressDlg的使用
- 使用CFindReplaceDialog
- centos系统下,Qt中使用openGL和cuda,.pro需要配置的库和头文件