zoukankan      html  css  js  c++  java
  • QT_StepByStep(3)--创建一个对话框

    • FINDDIALOG_H 头文件:
    #ifndef FINDDIALOG_H
    #define FINDDIALOG_H
    #include <QtGui/QDialog>
    /*声明四个用到的类*/
    class QCheckBox;
    class QLabel;
    class QLineEdit;
    class QPushButton;
    /*首先定义一个派生类QDialog,基类是FindDialog*/
    class FindDialog  : public QDialog
    {
    /*Q_OBJECT 是宏,定义信号槽的类都要声明这个宏*/
    Q_OBJECT
    /*构造函数和析构函数*/
    public:
    FindDialog(QWidget  *parent = 0);
    ~FindDialog();
    /*signals,QT关键字,对信号定义.FindDialog 有两个public 的信号,它可以在特定的时刻发出这两个信号,就这里来说,如果用户点击了Find 按钮,并且选中了 Search  backward ,就会发出 findPrevious() ,否则发出findNext()。*/
    signals:
    void findNext(const QString &str, Qt::CaseSensitivity  cs);
    void findPrevious(const QString &str, Qt::CaseSensitivity  cs);
    
    /*私有槽的定义.*/
    private slots:
    void findClicked();
    void enableFindButton(const  QString &text);
    
    private:
    QLabel  *label;
    QLineEdit  *lineEdit;
    QCheckBox *caseCheckBox;
    QCheckBox *backwardCheckBox; 
    QPushButton *findButton;
    QPushButton *closeButton;
    };
    #endif // FINDDIALOG_H
    • FindDialog.cpp 函数:
    /*QtGui,它包括了QtCore 和 QtGui 模块。是统称,在正式开发的时候用到哪些组件,使能哪些组件*/
    #include <QtGui>
    
    #include "finddialog.h"
    
    /*在类的外面定义派生类狗在函数*/
    FindDialog::FindDialog(QWidget  *parent): QDialog(parent)
    {
    label  = new QLabel(tr("Find  &what:"));
    lineEdit  = new QLineEdit;
    label ->setBuddy(lineEdit);
    
    /*创建了两个 QCheckBox,把默认的按钮设为 findButton,把 findButton 设为不可用——也就是变成灰色的了。*/
     
    caseCheckBox = new QCheckBox(tr("Match &case"));
    backwardCheckBox = new QCheckBox(tr("Search &backford"));
    findButton = new QPushButton(tr("&Find"));
    findButton->setDefault(true);
    findButton->setEnabled(false);
    closeButton = new QPushButton(tr("Close"));
    
    /*connect 语句,用来连接信号槽,当 lineEdit 发出textChanged(const  QString&) 信 号 时, FindDialog 的 enableFindButton(const QString&)函数会被调用。

    注意,connect()函数也是 QObject 的,因为我们继承了 QObject,所以能够直接使用。

    */
    connect(lineEdit,  SIGNAL(textChanged(const  QString&)),  this, SLOT(enableFindButton(const QString&)));
    connect(findButton, SIGNAL(clicked()), this, SLOT(findClicked()));
    connect(closeButton, SIGNAL(clicked()), this, SLOT(close()));
    
    QHBoxLayout  *topLeftLayout = new QHBoxLayout;
    topLeftLayout->addWidget(label);
    topLeftLayout->addWidget(lineEdit);
    
    QVBoxLayout  *leftLayout = new QVBoxLayout;
    leftLayout->addLayout(topLeftLayout);
    leftLayout->addWidget(caseCheckBox);
    leftLayout->addWidget(backwardCheckBox);
    
    QVBoxLayout  *rightLayout = new QVBoxLayout;
    rightLayout->addWidget(findButton);
    rightLayout->addWidget(closeButton);
    rightLayout->addStretch();
    
    QHBoxLayout  *mainLayout = new QHBoxLayout;
    mainLayout->addLayout(leftLayout);
    mainLayout->addLayout(rightLayout);
    setLayout(mainLayout);
    setWindowTitle(tr("Find"));//设置对话框标题
    setFixedHeight(sizeHint().height());
    //设置对话框高度,这里调用sizeHint().height())函数为最理想高度
    }
    
     
    /*槽函数*/
    FindDialog::~FindDialog()
    {
    }
    /*槽函数,首先取出 lineEdit 的输入值;然后判断 caseCheckBox是不是选中。如果 backwardCheckBox 被选中,就 emit(发出)信号 findPrevious(),否则 emit 信号 findNext。*/
    void FindDialog::findClicked()
    {
    QString text = lineEdit->text();
    Qt::CaseSensitivity  cs  =  caseCheckBox->isChecked()  ?  Qt::CaseInsensitive  : Qt::CaseSensitive;
    if(backwardCheckBox->isChecked()) {
        emit findPrevious(text, cs);
        } else {
        emit findNext(text, cs);
    }
    }
    void FindDialog::enableFindButton(const  QString &text)
    {
    findButton->setEnabled(!text.isEmpty());
    }
    • main.cpp
    #include <QApplication>
    #include "finddialog.h"
    int main(int argc, char *argv[])
    {
    QApplication  app(argc, argv);
    FindDialog  *dialog  = new FindDialog;
    dialog->show();
    return app.exec();
    }
  • 相关阅读:
    一款前端文件上传工具
    聊一聊最近找工作的感受
    神秘的计算机网络----(1)
    月下无限连?拒绝无休止switch!
    计算机网络---序
    验证码识别
    两数之和
    Sanic框架基础之解决CORS跨域
    Sanic框架进阶之实现异步缓存组件
    asyncio异步模块的21个协程编写实例
  • 原文地址:https://www.cnblogs.com/yechuang/p/4531179.html
Copyright © 2011-2022 走看看