PreferenceDialog::PreferenceDialog(QWidget *parent) : QDialog(parent) { // 创建右边的四个页面 createAppearancePage(); createWebBrowserPage(); createMailAndNewsPage(); createAdvancedPage(); // 创建下面的 button box buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); // 创建左边的导航的list listWidget = new QListWidget; listWidget->setIconSize(QSize(20, 20)); // 相对路径从运行程序的当前路径算起 // QListWidgetItem *item = new QListWidgetItem(QIcon("../preferences/Resources/start1.png"), tr("Appearance")); QListWidgetItem *item = new QListWidgetItem(QIcon("../LearnOptionDialog/Resources/stop.png"), tr("Appearance")); item->setSizeHint(QSize(-1, 30)); // item->setIC(); listWidget->addItem(item); // listWidget->addItem(tr("Appearance")); listWidget->addItem(tr("Web Browser")); listWidget->addItem(tr("Mail & News")); listWidget->addItem(tr("Advanced")); // 把4个页面放入 QStackedLayout stackedLayout = new QStackedLayout; stackedLayout->addWidget(appearancePage); stackedLayout->addWidget(webBrowserPage); stackedLayout->addWidget(mailAndNewsPage); stackedLayout->addWidget(advancedPage); connect(listWidget, SIGNAL(currentRowChanged(int)), stackedLayout, SLOT(setCurrentIndex(int))); // 布局 QGridLayout *mainLayout = new QGridLayout; mainLayout->setColumnStretch(0, 1); mainLayout->setColumnStretch(1, 3); mainLayout->addWidget(listWidget, 0, 0); mainLayout->addLayout(stackedLayout, 0, 1); mainLayout->addWidget(buttonBox, 1, 0, 1, 2); setLayout(mainLayout); connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept())); connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); setWindowTitle(tr("Preferences")); listWidget->setCurrentRow(0); }
PreferenceDialog::PreferenceDialog(QWidget *parent) : QWidget(parent), ui(new Ui::PreferenceDialog) { ui->setupUi(this); createAppearancePage(); createWebBrowserPage(); createMailAndNewsPage(); createAdvancedPage(); buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); //列表框 listWidget = new QListWidget; listWidget->addItem(tr("Appearance")); listWidget->addItem(tr("Web Browser")); listWidget->addItem(tr("Mail & News")); listWidget->addItem(tr("Advanced")); //分页--通过设置当前的页号,来调用appearancePage/webBrowserPage/mailAndNewsPage/advancedPage stackedLayout = new QStackedLayout; stackedLayout->addWidget(appearancePage); stackedLayout->addWidget(webBrowserPage); stackedLayout->addWidget(mailAndNewsPage); stackedLayout->addWidget(advancedPage); //页号的改变,引发页面的转换 connect(listWidget, SIGNAL(currentRowChanged(int)), stackedLayout, SLOT(setCurrentIndex(int))); //Grid的页面布局---这里通常用设计师比较好,而非手写 QGridLayout *mainLayout = new QGridLayout; mainLayout->setColumnStretch(0, 1); mainLayout->setColumnStretch(1, 3); mainLayout->addWidget(listWidget, 0, 0); mainLayout->addLayout(stackedLayout, 0, 1); mainLayout->addWidget(buttonBox, 1, 0, 1, 2); setLayout(mainLayout); connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept())); connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); setWindowTitle(tr("Preferences")); listWidget->setCurrentRow(0); }
StackedLayout::StackedLayout(QWidget *parent) : QDialog(parent) { createAppearancePge(); createWebBrowserPage(); createMailAndNewsPage(); createAdvancedPage(); okPushButton = new QPushButton(tr("确定")); cancelPushButton = new QPushButton(tr("取消")); /*! clicked信号的相连 */ connect(okPushButton, &QPushButton::clicked, this, &StackedLayout::accept); connect(cancelPushButton, &QPushButton::clicked, this, &StackedLayout::reject); QHBoxLayout *buttonsHBoxLayout = new QHBoxLayout; /*! 添加一个占据空白的伸缩弹簧 */ buttonsHBoxLayout->addStretch(); buttonsHBoxLayout->addWidget(okPushButton); buttonsHBoxLayout->addWidget(cancelPushButton); /*! QListWidget部件使用addItem进行项的添加 */ listWidget = new QListWidget; listWidget->addItem(tr("外表")); listWidget->addItem(tr("浏览器")); listWidget->addItem(tr("邮件和新闻")); listWidget->addItem(tr("高级")); stackedLayout = new QStackedLayout; stackedLayout->addWidget(appearancePage); stackedLayout->addWidget(webBrowerPage); stackedLayout->addWidget(mailAndNewsPage); stackedLayout->addWidget(advancedPage); /*! 将QListWidget的当前项和QStackedLayout需要展示的页面进行相联系 */ connect(listWidget, &QListWidget::currentRowChanged, stackedLayout, &QStackedLayout::setCurrentIndex); QGridLayout *mainLayout = new QGridLayout; /*! 设置第一列的伸缩强度宽1,设置第二列的伸缩强度宽为3. 实际的效果是两列的跨度为1:3 */ mainLayout->setColumnStretch(0, 1); mainLayout->setColumnStretch(1, 3); mainLayout->addWidget(listWidget, 0, 0); mainLayout->addLayout(stackedLayout, 0, 1); mainLayout->addLayout(buttonsHBoxLayout, 1, 0, 1, 2); this->setLayout(mainLayout); this->resize(800, 600); this->setWindowTitle(tr("堆叠布局")); /*! 将第一个页面作为缺省的页面 */ listWidget->setCurrentRow(0); }
PreferenceDialog::PreferenceDialog(QWidget *parent) : QDialog(parent) { createAppearancePage(); createWebBrowserPage(); createMailAndNewsPage(); createAdvancedPage(); okButton = new QPushButton(tr("OK")); cancelButton = new QPushButton(tr("Cancel")); okButton->setDefault(true); listWidget = new QListWidget; listWidget->addItem(tr("Appearance")); listWidget->addItem(tr("Web Browser")); listWidget->addItem(tr("Mail & News")); listWidget->addItem(tr("Advanced")); stackedLayout = new QStackedLayout; stackedLayout->addWidget(appearancePage); stackedLayout->addWidget(webBrowserPage); stackedLayout->addWidget(mailAndNewsPage); stackedLayout->addWidget(advancedPage); connect(listWidget, SIGNAL(currentRowChanged(int)), stackedLayout, SLOT(setCurrentIndex(int))); QHBoxLayout *buttonLayout = new QHBoxLayout; buttonLayout->addStretch(); buttonLayout->addWidget(okButton); buttonLayout->addWidget(cancelButton); QGridLayout *mainLayout = new QGridLayout; mainLayout->setColumnStretch(0, 1); mainLayout->setColumnStretch(1, 3); mainLayout->addWidget(listWidget, 0, 0); mainLayout->addLayout(stackedLayout, 0, 1); mainLayout->addLayout(buttonLayout, 1, 0, 1, 2); setLayout(mainLayout); connect(okButton, SIGNAL(clicked()), this, SLOT(accept())); connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject())); setWindowTitle(tr("Preferences")); listWidget->setCurrentRow(0); }
PreferenceDialog::PreferenceDialog(QWidget *parent) : QDialog(parent) { createAppearancePage(); createWebBrowserPage(); createMailAndNewsPage(); createAdvancedPage(); buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); listWidget = new QListWidget; listWidget->addItem(tr("Appearance")); listWidget->addItem(tr("Web Browser")); listWidget->addItem(tr("Mail & News")); listWidget->addItem(tr("Advanced")); stackedLayout = new QStackedLayout; stackedLayout->addWidget(appearancePage); stackedLayout->addWidget(webBrowserPage); stackedLayout->addWidget(mailAndNewsPage); stackedLayout->addWidget(advancedPage); connect(listWidget, SIGNAL(currentRowChanged(int)), stackedLayout, SLOT(setCurrentIndex(int))); QGridLayout *mainLayout = new QGridLayout; mainLayout->setColumnStretch(0, 1); mainLayout->setColumnStretch(1, 3); mainLayout->addWidget(listWidget, 0, 0); mainLayout->addLayout(stackedLayout, 0, 1); mainLayout->addWidget(buttonBox, 1, 0, 1, 2); setLayout(mainLayout); connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept())); connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); setWindowTitle(tr("Preferences")); listWidget->setCurrentRow(0); }