大宇私人领地伊甸园丨宁愿做了后悔,也不要错过后悔[www.mrdayu.com]
注册

24小时联系邮箱:[email protected]

所有文章
大宇私人伊甸园: 首页 > 所有文章 > 编程人生 > 系统架构 > QT > 《大宇:Qt入门到精通》 > [003.05]扩展对话框ExtensionDialog的设计

[003.05]扩展对话框ExtensionDialog的设计

发布时间:2017/12/12 《大宇:Qt入门到精通》 所有文章 标签qt扩展对话框阅读:647

引:上一节课我们已经学会了如何创建对话框,但我们还是能发现,之前所学的知识只能创建一些相同控件的对话框。

在有些情况,我们还是非常希望能够提供一些可以改变形状的对话框,今天我们就来介绍其中一种的扩展对话框。

首先:

1、打开Qt,新建SLN,名字改为ExtensionDialog,当然名字可以随意,但如果对Qt还不是很了解的话最好的方式是跟着我敲一遍完整的代码,然后再尝试着去改变。

2、在创建好的SLN上右键》》添加新文件…

3、在弹出的窗口选择Qt》》Qt设计师界面类[PS:当然,你可以选择使用纯代码实现,如果你对Qt特别熟悉的话]

4、在Qt设计器界面类中选择Dialog without Buttons然后确认点击下一步。

5、这就是接下来发挥你想象的空间。

6、拖出两个PushButton按钮,控件在Button分类的第一个选项,左键不放手直到拉到目标位置放手。

7、更改第一个PushButton按钮的名字为OK,ObjectName更改为okButton。这里的名字可以理解为外号,okButton才是代码中真正操作的对象,有如身份证号,而你的名字就如ok。[词穷,见谅!]

8、然后再拖出一个Vertical Spacer、一个Horizontal Spacer、一个GroupBox、两个Label、两个ComboBox以及一个pushButton。

9、将最后那个PushBtton名字更改为more,objectName更改为moreButton。

10、发挥你的想象将这几个控件整理为下图所示并改变其名字,挂件排版神器已经为你用箭头标注。

11、再拖出一个弹簧

12、点击GroupBox按住ctrl键不松手,直到重复两次拖出两个和之前建立的一模一样的GroupBox控件。

13、对其进行大小改变以及Layout设置。

最终效果图:

当然,你可以双击ComboBox按钮,出现右图,点击加号,输入你想添加的Item,点击OK表示确认。

更改ObjectName:

可以用于参考,当然更改的ObjectName将用于代码的直接操作:

1、三个GroupBox分别命名:OneGroup、TwoGroup、ThreeGroup

2、OneGroup的两个ComboBox分别命名:OneColumn和OneOrder

3、TwoGroup的两个ComboBox分别命名:TwoColumn和TwoOeder[ThreeGroup…就按照此规则变化]

注意:

返回解决方案界面。

由于Qt设计..程序会自动生成.h和.cpp文件,所生成的文件为图下所示,为了方便,我们将#include “ui_ExternsionDialog.h”移动到.h文件

并且删除ui(new Ui::ExtensionDialog)此行,记得删除头上多余的逗号,当然此时我们会在Class ExternsionDialog类后面的继承上加上public Ui::ExtensionDialog

最终程序运行情况:

连接信号槽:

1、打开编辑(E)选择Edit Signals/Slot(F4)

2、点击OK和Cancel任意键,拖动到窗口空白处,放开,选择clicked(bool)》》分别设为accept(bool)和reject(bool)

3、从more按钮中拖出箭头指向TwoGroup,选择toggled(bool),然后点击右图箭头4,将从QWidget继承的信号和槽显示出来,并选择setVisible(bool)

4、同上将more按钮和ThreeGroup建立联系。

下图为最终信号槽函数建立图

最终退出信号和槽函数建立模式返回widgets edit模式可以使用F3快捷键或者如图下点击编辑,选择Edit Widgets…

点击两个Vertical Spacer弹簧,如图下,设置宽高:20,0,然后保存点击运行。

添加代码如下:

ExtensionDialog.h:

#ifndef EXTENSIONDIALOG_H
#define EXTENSIONDIALOG_H

#include <QDialog>
#include "ui_ExtensionDialog.h"



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

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

#endif // EXTENSIONDIALOG_H

ExtensionDialog.CPP:

#include "ExtensionDialog.h"


ExtensionDialog::ExtensionDialog(QWidget *parent) :
    QDialog(parent)
{
    setupUi(this);
    TwoGroup->hide();
    ThreeGroup->hide();
    layout()->setSizeConstraint(QLayout::SetFixedSize);
    setColumnRange('A', 'Z');
}

ExtensionDialog::~ExtensionDialog()
{
}

void ExtensionDialog::setColumnRange(QChar first, QChar last)
{
    OneColumn->clear();
    TwoColumn->clear();
    ThreeColumn->clear();

    TwoColumn->addItem(tr("None"));
    ThreeColumn->addItem(tr("None"));

    OneColumn->setMinimumSize(
            TwoColumn->sizeHint());

    QChar ch = first;
    while (ch <= last) {
        OneColumn->addItem(QString(ch));
        TwoColumn->addItem(QString(ch));
        ThreeColumn->addItem(QString(ch));
        ch = ch.unicode() + 1;
    }
}

Mian.cpp:

#include <QApplication>

#include "ExtensionDialog.h"

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

效果完成:

点击more按钮,能实现隐藏和显示TwoGroup和ThreeGroup的功能。

The bottom line, for me, is simple.

Let’s hope it doesn’t take 500 years for a discipline of testing to becomes the standard for software developers.

From:dayu

您好!请登录

合作网站快捷登录:
点击取消回复

已有0评论

    大宇博客

    点击这里给我发消息 点击这里给我发消息 点击这里给我发消息 点击这里给我发消息