Qt4读书笔记8
2009-2-2
形状变化的对话框(Shape-Changing Dialogs)
有时需要提供形状变化的对话框。两种重要的变形对话框是extension dialogs和multi-page dialogs. Qt都可以很好的支持。
extension dialog通常有一个简单的界面,但有一个开关按钮,用户通过这个按钮可以在简单界面和扩展界面间切换。extension dialogs通常用于迎合熟悉的用户和偶尔使用的用户。当用户不需要时隐藏一些细节选项。我们的例子:
简单界面:
-----------------------------------
sort ? - X
--Primary Key----------- --------
| | | OK |
| Column: -下拉框- | --------
| Order: -下拉框- | --------
| | | Cancel|
------------------------ --------
--------
| More |
-----------------------------------
点击More会出现复杂界面:
-----------------------------------
sort ? - X
--Primary Key----------- --------
| | | OK |
| Column: -下拉框- | --------
| Order: -下拉框- | --------
| | | Cancel|
------------------------ --------
--------
| More |
--------
--Secondary Key--------- |
| | |
| Column: -下拉框- | |
| Order: -下拉框- | |
| | |
------------------------ |
|
--Tertiary Key---------- |
| | |
| Column: -下拉框- | |
| Order: -下拉框- | |
| | |
------------------------ |
------------------------------------
用Qt Designer创建这个对话框,先创建简单的,再复制一份添加第二、第三keys界面。
Qt Designer运行我们建立组件间的连接,点击Edit|Edit Signals/Slots 进入Designer的connection mode. 建立More按钮与secondaryGroupBox,tertiayGroupBox之间的连接。
相关代码:
sortdialog.h
#ifndef SORTDIALOG_H
#define SORTDIALOG_H
#include <QDialog>
#include "ui_sortdialog.h"
class SortDialog : public QDialog, public Ui::SortDialog
{
Q_OBJECT
public:
SortDialog(QWidget *parent = 0);
void setColumnRange(QChar first, QChar last);
};
#endif
Sortdialog.cpp
#include <QtGui>
#include "sortdialog.h"
SortDialog::SortDialog(QWidget *parent) : QDialog(parent)
{
setupUi(this);
secondaryGroupBox->hide();
tertiaryGroupBox->hide();
layout()->setSizeConstraint(QLayout::SetFixedSize);
setColumnRange('A', 'Z');
}
void SortDialog::setColumnRange(QChar first, QChar last)
{
primaryColumnCombo->clear();
secondaryColumnCombo->clear();
tertiaryColumnCombo->clear();
secondaryColumnCombo->addItem(tr("None"));
tertiaryColumnCombo->addItem(tr("None"));
primaryColumnCombo->setMinimumSize(secondaryColumnCombo->sizeHint());
QChar ch = first;
while(ch <= last)
{
primaryColumnCombo->addItem(QString(ch));
secondaryColumnCombo->addItem(QString(ch));
tertiaryColumnCombo->addItem(QString(ch));
ch = ch.unicode() + 1;
}
}
Main.cpp
#include <QApplication>
#include "sortdialog.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
SortDialog *dialog = new SortDialog;
dialog->setColumnRange('C', 'F');
dialog->show();
return app.exec();
}