zoukankan      html  css  js  c++  java
  • QT练习4:编写一个查找对话框

    分为3个文件:

    finddialog.h:

    #ifndef FINDDIALOG_H
    #define FINDDIALOG_H

    #include
    <QDialog>

    class QCheckBox;
    class QLabel;
    class QLineEdit;
    class QPushButton;

    //自定义类,继承于QDialog
    class FindDialog:public QDialog
    {
    Q_OBJECT
    public:
    FindDialog(QWidget
    *parent=0);//构造函数

    signals:
    void findNext(const QString &str,bool caseSensitive);
    void findPrev(const QString &str,bool caseSensitive);
    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
    #include <QCheckBox>
    #include
    <QLabel>
    #include
    <QLayout>
    #include
    <QLineEdit>
    #include
    <QPushButton>

    #include
    "finddialog.h"

    FindDialog::FindDialog(QWidget
    *parent)
    :QDialog(parent)
    //对父类进行构造
    {
    label
    = new QLabel(tr("Find &what:"),this);
    lineEdit
    = new QLineEdit("wenhao",this);
    label
    ->setBuddy(lineEdit);//label,lineEdit是伙伴关系.按label的快捷键进入lineEdit中


    caseCheckBox
    = new QCheckBox(tr("Match &case"),this);
    backwardCheckBox
    = new QCheckBox(tr("Search &backward"),this);

    findButton
    = new QPushButton(tr("&Find"),this);
    findButton
    ->setDefault(true);//接回车键相当于按下findButton键
    findButton->setEnabled(false);//这个设置让其默认是不可以点击的.

    closeButton
    = new QPushButton(tr("Close"),this);
    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(1);//

    QHBoxLayout
    *mainLayout = new QHBoxLayout(this);
    mainLayout
    ->setMargin(11);
    mainLayout
    ->setSpacing(4);
    mainLayout
    ->addLayout(leftLayout);
    mainLayout
    ->addLayout(rightLayout);
    setLayout(mainLayout);

    setWindowTitle(tr(
    "Find..."));
    }


    void FindDialog::findClicked()
    {
    QString text
    = lineEdit->text();
    bool caseSensitive = caseCheckBox->isChecked();

    if(backwardCheckBox->isChecked())
    emit findPrev(text,caseSensitive);
    else
    emit findNext(text,caseSensitive);
    }

    void FindDialog::enableFindButton(const QString &text)
    {
    findButton
    ->setEnabled(!text.isEmpty());
    }


    main.cpp
    #include <QApplication>
    #include
    <QPushButton>
    #include
    <QHBoxLayout>
    #include
    <QWidget>
    #include
    "finddialog.h"
    int main(int argc, char *argv[])
    {
    QApplication app(argc,argv);
    FindDialog
    *dialog = new FindDialog;
    dialog
    ->show();
    return app.exec();
    }



    效果图:

  • 相关阅读:
    一行代码搞定Dubbo接口调用
    测试周期内测试进度报告规范
    jq 一个强悍的json格式化查看工具
    浅析Docker容器的应用场景
    HDU 4432 Sum of divisors (水题,进制转换)
    HDU 4431 Mahjong (DFS,暴力枚举,剪枝)
    CodeForces 589B Layer Cake (暴力)
    CodeForces 589J Cleaner Robot (DFS,或BFS)
    CodeForces 589I Lottery (暴力,水题)
    CodeForces 589D Boulevard (数学,相遇)
  • 原文地址:https://www.cnblogs.com/hnrainll/p/2053578.html
Copyright © 2011-2022 走看看