一、SortDialog效果图
二、实现代码
H文件:
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
//设置checkBox的值,参加排序的列名。
void SetColumnRange(QChar first,QChar last);
signals:
private:
Ui::Dialog *ui;
};
#endif // DIALOG_H
CPP文件:
#include "Dialog.h"
#include "ui_Dialog.h"
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QDialogButtonBox>
#include <QGridLayout>
#include <QSpacerItem>
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
//隐藏第二个和第三个群租框
ui->secondaryGroupBox->hide();
ui->tertiaryGroupBox->hide();
//设置布局大小
this->layout()->setSizeConstraint(QLayout::SetFixedSize);
SetColumnRange('A','Z');
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::SetColumnRange(QChar first, QChar last)
{
//清楚checkBox的值
ui->primaryColumnCobo->clear();
ui->secondaryColumnCobo->clear();
ui->tertiaryColumnCobo->clear();
//设置checkBox的第一项值
ui->secondaryColumnCobo->addItem("None");
ui->tertiaryColumnCobo->addItem("None");
//设置大小
ui->primaryColumnCobo->setMinimumSize(ui->secondaryColumnCobo->sizeHint());
QChar ch = first;
//设置checkBox的默认值
while(ch <= last)
{
ui->primaryColumnCobo->addItem(QString(ch));
ui->secondaryColumnCobo->addItem(QString(ch));
ui->tertiaryColumnCobo->addItem(QString(ch));
ch = ch.unicode() + 1;
}
}
四、Qt设计师界面设计
布局设计图:
信号和槽:
三、关键代码
1、设置布局的SizeConstraint属性
this->layout()->setSizeConstraint(QLayout::SetFixedSize);
没有SizeConstraint属性的结果:
SizeConstraint:该属性值是一个枚举常量,定义了布局的大小约束的模式。它的默认值是QLayout::SetDefaultConstraint。取值如下:
翻译:
QLayout::SetDefaultConstraint 0 主窗口部件的最小尺寸设置为minimumSize(),除非该窗口部件 已经有一个最小尺寸。
QLayout::SetFixedSize 3 主窗口部件的尺寸设置为sizeHint(),并且不允许改变该窗口部件的尺寸。
QLayout::SetMinimumSize 2 主窗口部件的最小尺寸设置为minimumSize(),并且该窗口部件不能够变得更小。
QLayout::SetMaximumSize 4 主窗口部件的最大尺寸设置为maximumSize(),并且该窗口部件不能够变得更大。
QLayout::SetMinAndMaxSize 5 主窗口部件的最小尺寸设置为minimumSize(),最大尺寸设置为maximumSize()。
补充:
minimumSize():返回此布局的最小大小。这是在符合规格的情况下,布局所能达到的最小尺寸。 返回值不包括QWidget::setContentsMargins()或menuBar()所需的空间。默认实现允许无限调整大小。
maximumSize():返回此布局的最大大小。这是在符合规格的情况下,布局所能够达到的最大的尺寸。返回值不包括QWidget::setContentsMargins()或menuBar()所需的空间。默认实现允许无限调整大小。
2、More按钮
使用Qt设计师设计界面时,More按钮的checkable属性设置为选中,选中后,Button变成切换按钮(toggle button),可以有两种状态:按下/弹起,默认状况下checkable是不被选中的,Button默认为触发按钮(trigger button),按下去马上弹起来。这时拓展界面不会显示。
3、button的clicked()和toggled(bool)
信号 | 描述 |
clicked | 当鼠标左键被按下然后释放时,或者快捷键被释放时触发该信号 |
clicked[bool] | 当按钮被第一次按下然后释放时发出信号,并将当前状态传递给外界 |
toggled | 按钮的状态发生变化时发出信号,并将当前状态传递给外界 |
toggled[bool] | 当按钮的标记状态发生改变时触发信号 |
4、Spacres
两个弹簧的高度都设置为0。
四、总结
当界面比较复杂时,应该代码与Qt设计师相互配合使用。