QT学习教程(六)

能够改变的对话框(Shape-Changing Dialogs)

对话框是一个表格程序的排序对话框,对用户选择的一些列按要求排列。对话框的简单外观允许用户输入一个简单排序关键词,扩展部分允许输入两个额外的排序关键词。一个 More 按钮使用户在简单外观和扩展外观进行切换。

我们使用Qt Designer 创建这个可扩展的对话框,在运行时刻隐藏高级功能,这个看起来很复杂的对话框用Qt Designer 可以很容易实现。首先设计好第一个关键词,第二个和第三个关键词通过复制就可以得到:

1、启动File|New 菜单,选择“Dialog with Buttons Right”模板。

2、创建More 按钮,并将它托到右边的垂直布局管理器中,放到垂直空白的下面。设置按钮的文本属为“&More”,它的checkable 属性为“true”,设置Ok 按钮的default 属性为true。

3、创建一个组合框,两个标签,两个下拉组合框和一个水平空白,先把它们放在对话框的任何地方。

4、把组合框拖动大些,把 3 中其他控件拖动到其中,按比例调整位置。

5、第二个下拉框宽度调整为第一个下拉框的二倍。

6、设置组合框的 title 属性为“&Primary Key”,第一个标签的text 属性为“Column:”,第二个标签的text 属性为“Order:”。

7、设置第一个下拉框的第一个项目文本项为“None”。

8、设置第二个下拉框的项目为“Ascending”和“Descending”两个项目,即升序和降序排列。

9、选择组合框,设置它的布局为 Grid。

如果设计过程中出现错误,可以选择 Edit|Undo 或者Form|Break Layout,重新进行排列。当然只要看起来不是很难看,也可以是其他的样子,只要易于理解就是 ok。

现在加入第二个,第三个关键词:

1、把对话框拖动到足够大。

2、复制第一个组合框,粘贴两次,一次拖动到下面。

3、把复制的两个组合框的 title 属性为“&Secondary Key”和“Tertiary Key”。

4、在第一个关键词和第二个关键词组合框之间添加一个垂直空白。

5、调整添加的控件。

6、选择这个对话框,降它设置为 Grid 管理。

7、设置两个垂直空白的 sizeHint 属性为[20,0]。

按照下图命名每一个控件。命名对话框为sortDialog,窗口标题为“Sort”。

然后设置控件的tab 顺序。从上到下点击下拉框,然后点击 Ok,Cancel,More 按钮。

以上是对话框的设计。然后用Qt Designer 建立控件的信号连接。因为我们创建对话框时使用了“Dialog with Buttons Right”模板,Ok 和Cancel 按钮已经连接到了对话框的accept()和 reject()槽函数。连接可以在 Qt designer 的signal/slot 编辑窗口查看。我们需要自己建立的连接是连接More 按钮和secondary-GroupBox。将按钮的toggled(bool)信号和组合框的 setVisible(bool)连接。选择Edit|Signal/Slots,将编辑状态变为连接态,拖动 More 按钮到 secondary-GroupBox 上,弹出信号编辑对话框。创建一个sort 目录,保存对话框文件到sort 目录的sortdialog.ui,使用多继承的方式使用这个对话框。

首先新建一个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 源文件:
1	#include <QtGui>
2	#include "sortdialog.h"
3	SortDialog::SortDialog(QWidget *parent)
4	: QDialog(parent)
5 {
6	setupUi(this);
7	secondaryGroupBox->hide();
8	tertiaryGroupBox->hide();
9	layout()->setSizeConstraint(QLayout::SetFixedSize);
10	setColumnRange('A', 'Z');
11 }
12	void SortDialog::setColumnRange(QChar first, QChar last)
13	{
 
14	primaryColumnCombo->clear();
15	secondaryColumnCombo->clear();
16	tertiaryColumnCombo->clear();
17	secondaryColumnCombo->addItem(tr("None"));
18	tertiaryColumnCombo->addItem(tr("None"));
19	primaryColumnCombo->setMinimumSize(
20	secondaryColumnCombo->sizeHint());
21	QChar ch = first;
22	while (ch <= last) {
23	primaryColumnCombo->addItem(QString(ch));
24	secondaryColumnCombo->addItem(QString(ch));
25	tertiaryColumnCombo->addItem(QString(ch));
26	ch = ch.unicode() + 1;
27	}
28 }

在构造函数中,隐藏了第二个和第三个关键词部分。设置对话框的 sizeConstraint 的属性为QLayout::setFixedSize,这样用户就不能随便改变对话框的大小。下面是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();
}

编译运行这个程序,点击 More 按钮,查看对话框的改变。

另一种可以改变的对话框是多页对话框。这类对话框也可以用两种方式创建。相关的类有

QTabWidget,QStackedWidget,QListWidget,QTreeWidget 等以后介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随风逐流wrx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值