Qt快速设置对话框(扩展对话框)-designer(3)

记录自己学习qt之路的一点一滴。
在弄清楚qt如何创建对话框(Qt快速设计对话框(控件属性)-designer(1),Qt快速设置对话框(部件布局)-designer(2)),并且设置布局之后,想要有的时候可以能够设计改变形状的对话框,在qt中最常见的可改变形状的对话框有:扩展对话框、多页对话框
以下是扩展对话框的格式:

点击More按钮之前
Qt快速设置对话框(扩展对话框)-designer(3)_第1张图片

点击More按钮后
Qt快速设置对话框(扩展对话框)-designer(3)_第2张图片
这种形式的对话框无论是使用代码,还是使用qt设计师,都可以快速实现。以下是如何通过代码和设计师一起实现扩展对话框的步奏:

1.创建如下图的对话框

Qt快速设计对话框(控件属性)-designer(1)
(1)单机File->New form,创建”Dialog without Buttons" 模板
(2)创建OK按钮、Cancel按钮、More按钮,设置其objectName分别为okButton、cancelButton、moreButton,在cancel按钮和more按钮之间加入垂直分隔符
(3)设置moreButton属性text为‘&More’,加‘&’符原因请看之前第二篇博客,设置checkable属性为‘true’
(4)创建群组对话框,两个标签、两个组合框、和一个水平分隔符
(5)设置群组对话框title属性为‘&Primary Key’,第一个标签text属性设置为‘Column’,第三个标签text属性设置为‘Order’
(6)双击第一个组合框,添加第一个item项‘None’,第二个组合框添加item‘Ascending’和‘Desc-ending’项。
Qt快速设置对话框(扩展对话框)-designer(3)_第3张图片

2.设置对话框布局

Qt快速设置对话框(部件布局)-designer(2)
(1)按住Ctrl键依次点击ok按钮、cancel按钮、水平分隔符,more按钮,然后设置垂直布局
(2)点击群组框,然后点击栅格布局,再点击设置适应大小
Qt快速设置对话框(扩展对话框)-designer(3)_第4张图片

3.设置扩展对话框

(1)下拉对话框,设置窗口足够高,以便能够容下剩下两个部分
(2)复制群组框,并分别设置群组框title属性为‘&Secondary Key’和‘&Tertiary Key’
(3)创建垂直分隔符,放在图下位置
(4)分别设置组合框obectName为primaryColumnCombo、primaryOrderCombo、SecondaryColumnCombo、SecondaryOrderCombo、TertiaryColumnCombo、TertiaryOrderCombo
Qt快速设置对话框(扩展对话框)-designer(3)_第5张图片

4.设置布局

(1)窗口objecname设置未‘SortDialog’,title属性设置为‘Sort’
(2)设置窗口进行栅格布局
(3)设置两个垂直分隔符sizeHint属性为【20,0】
这个时候最终的网格布局一共4行2列
Qt快速设置对话框(扩展对话框)-designer(3)_第6张图片

5.设置tab顺序

Qt快速设置对话框(部件布局)-designer(2)
Qt快速设置对话框(扩展对话框)-designer(3)_第7张图片

6.设置连接模式

(1)单击Edit->Edit signals/slots,进入Qt设计师设置连接模式
(2)第一个连接设置okbutton和窗口accept槽,如下图所示。从对话框中选择信号clicked(),槽函数选择accept()
Qt快速设置对话框(扩展对话框)-designer(3)_第8张图片
(3)设置moreButton连接secondaryGroupBox群组框,选择toggled(bool)为信号,选择setVisible(bool)为槽函数,这个信号和槽需要点击配置连接下方显示才能够看的到
Qt快速设置对话框(扩展对话框)-designer(3)_第9张图片
(4)如下图设置完成
Qt快速设置对话框(扩展对话框)-designer(3)_第10张图片

7.编辑代码

新增sortdialog.h和sortdialog.cpp文件,代码分别如下:

sortdialog.h

#ifndef SORTDAIALOG_H
#define SORTDAIALOG_H

#include "ui_dialog.h"
#include 

class SortDialog : public QDialog, public Ui::SortDialog
{
    Q_OBJECT

public:
    SortDialog(QWidget* parent = 0);
    void setColumnRange(QChar first, QChar last);
};

#endif // SORTDAIALOG_H

sortdialog.cpp

#include "sortdialog.h"
#include 

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("None");
    TertiaryColumnCombo->addItem("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中进行显示

#include 
#include 

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    SortDialog* dialog = new SortDialog;
    dialog->setColumnRange('C', 'F');
    dialog->show();

    return a.exec();
}

就完成了

8.问题一、没有生成’ui_dialog.h‘头文件

如果编译没有生成’ui_dialog.h‘头文件,可能是项目属性中没有设置好,网上说,原因是xx.ui文件没有被mic.exe编译暂时先查查这个是不是设置了。
Qt快速设置对话框(扩展对话框)-designer(3)_第11张图片

9.问题二、找不到 Ui::SortDialog类

看一下是否是如此原因Qt Designer设置UI objectname属性

你可能感兴趣的:(QT学习之路)