Qt Dialog 界面设计之 FindDialog

目录

一、FindDialog效果图

二、实现代码

H文件:

CPP文件:

三、信号和槽

四、补充说明


一、FindDialog效果图

二、实现代码

代码的逻辑顺序:

         1、创建并初始化窗口部件。
         2、添加布局,把创建好的控件放入布局当中。
         3、设置控件的属性。
         4、建立信号-槽之间的连接。
         5、实现自定义槽。

H文件:

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QLabel>
#include <QLineEdit>
#include <QCheckBox>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();

signals:

void findPrevious(QString text,Qt::CaseSensitivity cs);
void findNext(QString text,Qt::CaseSensitivity cs);

private slots:
void EnableFindButton(const QString &text);
void FindClicked();


private:
    Ui::Dialog *ui;

private:
    QLabel *m_label;
    QLineEdit *m_lineEdit;
    QCheckBox *m_caseCheckBox;
    QCheckBox *m_backwardCheckBox;
    QPushButton *m_findButton;
    QPushButton *m_closeButton;

};

#endif // DIALOG_H

CPP文件:

#include "Dialog.h"
#include "ui_Dialog.h"
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);

    //1、初始化成员变量,并简单设置属性
    
    //"&" 符号表示快捷键 alt + w 可以激活
    m_label = new QLabel("Find &what:");
    m_lineEdit = new QLineEdit(this);
    //buddy 伙伴,当使用alt + w 快捷键时(原本应该焦点聚焦到m_label标签上)
    //但是设置行编辑器为m_label标签的伙伴时,焦点会聚焦到行编辑器上
    m_label->setBuddy(m_lineEdit);
    m_caseCheckBox = new QCheckBox("Match &case");
    m_backwardCheckBox = new QCheckBox("Search &backward");
    m_findButton = new QPushButton("&Find");
    //设置按钮m_findButton为默认按钮
    //默认按钮:当用户按下Enter键时能够按下对应的按钮
    m_findButton->setDefault(true);
    //禁用m_findButton 按钮表现为灰色,且不能和用户发生交互操作
    m_findButton->setEnabled(false);
    m_closeButton = new QPushButton("Close");

    //2、添加布局,把创建好的控件放入布局当中

    //构建左上面的布局,水平布局
    QHBoxLayout *lefTopLayout = new QHBoxLayout;
    lefTopLayout->addWidget(m_label);
    lefTopLayout->addWidget(m_lineEdit);
    //构建左侧的布局,垂直布局
    QVBoxLayout *leftLayout = new QVBoxLayout;
    leftLayout->addLayout(lefTopLayout);
    leftLayout->addWidget(m_caseCheckBox);
    leftLayout->addWidget(m_backwardCheckBox);
    //构建右侧布局,垂直布局
    QVBoxLayout *rightLayout = new QVBoxLayout;
    rightLayout->addWidget(m_findButton);
    rightLayout->addWidget(m_closeButton);
    //添加弹簧
    rightLayout->addStretch();
    //定义整个窗口的布局,把之前的布局都添加到这个整体布局当中
    QHBoxLayout *mainLayout = new QHBoxLayout;
    mainLayout->addLayout(leftLayout);
    mainLayout->addLayout(rightLayout);
    //设置窗口布局
    this->setLayout(mainLayout);

    //3、设置控件的属性

    //设置窗口的标题
    this->setWindowTitle("Find");
    //sizeHint可以返回一个窗口部件的理想尺寸
    this->setFixedHeight(sizeHint().height());

    //4、建立信号-槽之间的连接

//    connect(m_lineEdit,&QLineEdit::textChanged,this,&EnableFindButton);
//    connect(m_findButton,&QPushButton::clicked,this,&FindClicked);
//    connect(m_closeButton,&QPushButton::clicked,this,&Dialog::close);
    connect(m_lineEdit,SIGNAL(textChanged(QString)),this,SLOT(EnableFindButton(QString)));
    connect(m_findButton,SIGNAL(clicked(bool)),this,SLOT(FindClicked()));
    connect(m_closeButton,SIGNAL(clicked(bool)),this,SLOT(close()));

}

Dialog::~Dialog()
{
    delete ui;
}

//5、实现自定义槽
void Dialog::FindClicked()
{
   //获取文本编辑框的数据
   QString text = m_lineEdit->text();
   // Qt::CaseSensitivity 为枚举类型, 可取值Qt::CaseSensitive 和 Qt::CaseInsensitive, 表示匹配的灵敏度。
   //比较字符串的时候 Qt::CaseSensitive区分大小写,Qt::CaseInSensitive不区分大小写
   Qt::CaseSensitivity cs = m_caseCheckBox->isChecked()? Qt::CaseInsensitive : Qt::CaseInsensitive;
   //根据m_backwardCheckBox的状态发送不同的信号
   if(m_backwardCheckBox->isChecked())
   {
       emit findPrevious(text,cs);
   }
   else {
       emit findNext(text,cs);
   }
}
void Dialog::EnableFindButton(const QString &text)
{
    m_findButton->setEnabled(true);
}

三、信号和槽

1、一个信号可以连接多个槽,在发射这个信号的时候,会以不确定的顺序一个接着一个调用这些槽。

2、多个信号可以连接同一个槽,无论发射哪一个信号,都会调用这个槽。

3、一个信号可以与另外一个信号相连接。

4、连接可以被移除。

        a、当删除对象时,Qt会自动移除和这个对象相关的所有连接。

        b、调用移除连接函数 disconnect(sender,SIGNAL(signal),receiver,SLOT(slot))。

四、补充说明

1、将子布局添加到父布局中时,子布局对象就会自动重定义自己的父对象。

2、Qt在删除父对象的时候自动删除其所有的子对象。

3、可以通过setTabOrder()函数设置,按下Tab键的便利顺序

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Qt 中可以使用 QtDialogUI 来制作一个简单的计算器。 首先,我们可以创建一个 QtDialog 窗口来作为我们的计算器界面。通过继承 QDialog 类并实现需要的功能,我们可以自定义计算器的布局和交互。例如,我们可以在窗口中添加数字按钮、运算符按钮和显示结果的文本框。 接着,我们可以使用 Qt 的可视化设计工具来创建一个 UI 文件,用于定义计算器界面的布局和元素。在 UI 文件中,我们可以方便地拖拽和调整各个按钮和文本框的位置和大小。然后,我们可以将 UI 文件与 QtDialog 类关联起来,实现计算器界面和功能的绑定。 在 QtDialog 类的代码中,我们可以使用 Qt 的信号与槽机制来处理按钮的点击事件和计算逻辑。通过将按钮的点击信号与对应的槽函数连接起来,我们可以在用户点击按钮时执行相应的操作,比如将按钮的文本添加到计算表达式中,或者进行计算并显示结果。 最后,为了完成计算器的功能,我们还需要定义各个按钮的槽函数。这些槽函数可以使用 Qt 提供的 QRegularExpression 类来解析用户输入的表达式,并调用相应的计算函数进行计算。计算结果可以显示在文本框中,并根据需要进行格式化和处理。 通过以上步骤,我们可以使用 QtDialogUI 来制作一个简单的计算器。这样做的好处是可以方便地在界面上进行布局和设计,同时可以利用 Qt 的信号与槽机制实现计算器的功能。此外,Qt 还提供了丰富的界面控件和功能模块,可以进一步扩展计算器的功能,使其更加实用和易用。 ### 回答2: 在Qt中,我们可以使用Qt DialogQt UI设计来创建一个简单的计算器。 首先,我们需要创建一个新的Qt项目,并添加一个Qt Dialog部件。这个对话框将用于容纳我们的计算器界面。 接下来,我们需要在Qt Designer中设计计算器的用户界面。我们可以使用布局管理器来放置按钮、标签和文本框等控件。可以添加按钮来实现数字和操作符的输入,并添加一个结果文本框来显示计算结果。 在Qt代码中,我们首先需要使用Qt的信号和槽机制来连接按钮和计算函数。我们可以将按钮点击事件与槽函数进行连接,槽函数将根据按钮的文本执行相应的操作。 例如,当我们点击数字按钮时,应该将对应的数字追加到文本框中。当我们点击操作符按钮时,应该将对应的操作符存储起来。 接下来,我们需要实现一个计算函数来处理用户输入的表达式。我们可以使用eval()函数来动态计算表达式的值,并将结果显示在文本框中。 最后,我们需要将计算器界面显示在屏幕上。我们可以使用QDialog::exec()函数来显示对话框,并等待用户关闭计算器。 综上所述,通过使用Qt DialogQt UI设计,我们可以创建一个简单的计算器。这个计算器可以处理用户的输入,并显示计算结果。同时,我们还可以根据需要进行扩展,添加更多的功能和操作。 ### 回答3: Qt是一个广泛使用的C++开发框架,可以用于开发跨平台的应用程序。在Qt中,我们可以使用QtDialogUI来构建计算器应用程序。 首先,我们需要创建一个新的Qt项目。通过Qt Creator创建一个新的Qt Widgets应用程序项目。然后,我们可以在Qt Creator的主窗口中看到设计和代码视图。 在设计视图中,我们可以使用Qt的可视化设计器来创建计算器界面。可以添加按钮、文本框和标签等UI控件,并将它们排列成适当的布局。可以将这些UI控件命名为btn_0、btn_1、btn_2等等,以便在代码中引用。可以通过设置按钮的clicked信号来连接到相应的槽函数,以便在用户点击按钮时进行响应。 在代码视图中,我们可以使用Qt的信号和槽机制来处理UI控件的操作和交互。可以通过继承QDialog类来创建一个自定义对话框类,将其作为应用程序的主窗口。可以在自定义对话框类中定义计算器的逻辑和功能。例如,可以为每个数字按钮创建一个槽函数,以便在用户点击它们时将数字显示在文本框中。可以为运算符按钮创建槽函数,以便在用户点击它们时执行相应的计算操作。可以为等号按钮创建一个槽函数,以便在用户点击它时计算结果并显示在文本框中。 在槽函数中,可以使用Qt的QString类来操作和处理计算器的输入和输出。可以使用QString的toInt()、toDouble()等函数将文本转换为数字,并使用QString的arg()函数将结果转换为字符串。 最后,可以在主函数中实例化自定义对话框类,并调用show()函数将它显示出来。这样,当用户运行应用程序时,就会看到一个具有按钮和文本框的计算器界面。 总之,使用QtDialogUI来制作计算器可以充分利用Qt的功能和特性,简化开发过程并创建出功能强大且美观的界面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值