Shape-Changing Dialogs

 


窗体的sizeConstraint 属性设成QLayout::SetFixedSize,使得窗体对用户"大小非可调",并且其子Widget 在显示和隐藏的时侯窗体大小会自动调整,保证窗体以最合适的尺寸显示。


源码下载地址:

http://cid-620792b9d0909341.skydrive.live.com/self.aspx/.Public/src/Shape-Changing%20Dialogs.rar


新建sortdialog.ui

三个Push Button

两个label,两个Combobox,一个Horizontal Spacer


第一个Push Button 的objectName 属性设为"okButton" ,default 属性设为"true",text 属性设为"ok"

第二个Push Button 的objectName 属性设为"cancelButton",text 属性设为"cancel"

第三个Push Button 的objectName 属性设为"moreButton",text 属性设为""&More",checkable 属性设为"true"(重要!)

一个vertical spacer 放在第二和第三个Push Button 之间

第一个label 的objectName 属性设为"primaryColumnLabel",text 属性设为"Column:"

第二个label 的objectName 属性设为"primaryOrderLabel",text 属性设为"Order:"


第一个Combobox 的objectName 属性设为"primaryColumnCombo"

第二个Combobox 的objectName 属性设为"primaryOrderCombo"


一个group box,objectName 属性设为"primaryGroupBox",text 属性设为"&Primary Key",

把前面两个label 和两个Combobox 放进来(对齐出问题解决:或先放group box,在一个个拖控件进去)


选中group box ->Lay Out in a Grid


右击第一个Combobox ->Edit Items ->添加"None"

右击第二个Combobox ->Edit Items ->添加"Ascending"" 和"Descending"


选中primaryGroupBox,拖出两个Copy 版GroupBox,放下面。

title 属性分别改成"&Secondary Key" 和"&Tertiary Key"

在第一个Group box 和第二个Group box 之间加一个Vertical spacer


选中窗体 ->Lay Out in a Grid

两个vertical spacer 的sizeHint 属性设为[20, 0]

窗体的objectName 属性设为"SortDialog",title 设为"Sort"


编缉Edit Tab Order 顺序,随意就好。

 

 

现在,通过Qt Creator 设置signal–slot 连接


Edit ->Edit Signals/Slots

选中要发送信号的Widget,拖动红色的箭头到欲接收信号的Widget,忪开鼠标;

连接okButton 的clicked() 和窗体的 accept()

连接cancelButton 的clicked() 和窗体的 reject()

连接moreButton 的toggled(bool)  和secondaryGroupBox的 setVisible(bool) (重要!);默认setVisible(bool) 是不显示出来的,点Show all signals and slots

连接moreButton 的toggled(bool)  和tertiaryGroupBox的 setVisible(bool) (重要!)

Edit ->Edit Widgets 离开connect 模式


//
// 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();  // 一开始就把两GroupBox 隐藏
 tertiaryGroupBox->hide();
 layout()->setSizeConstraint(QLayout::SetFixedSize);  // 亮点  // 设置合适的大小,size 固定不能改

 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());  // 亮点 短ComboBox 向长ComboBox 看齐

 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"

#pragma comment(lib, "QtCore4.lib")
#pragma comment(lib, "QtGui4.lib")

int main(int argc, char *argv[])
{
 QApplication app(argc, argv);
 SortDialog *dialog = new SortDialog;
 dialog->setColumnRange('C', 'F');
 dialog->show();
 return app.exec();
}
//

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值