zoukankan      html  css  js  c++  java
  • Qt5:创建对话框

    以一个查找对话框为例子开始学习 用Qt创建一个对话框程序

    首先使用手工编码创建一个查找对话框程序

     1 #include "finddialog.h"
     2 #include<QtGui>
     3 
     4 FindDialog::FindDialog(QWidget *parent) :
     5     QDialog(parent)
     6 {  //查找窗口的部件的创建和初始化
     7     text    = new QLineEdit;
     8     caseSensCheck    = new QCheckBox(tr("Match Case"));
     9     prevCheck    = new QCheckBox(tr("Backward"));
    10     findText    = new QPushButton(tr("Find"));
    11     stopFind    = new QPushButton(tr("Stop"));
    12     //信号-槽的链接
    13     this->connect(text,SIGNAL(textChanged(const QString&)),
    14               this,SLOT(findBtnEnabled(const QString&)));
    15     this->connect(stopFind,SIGNAL(clicked()),
    16               this,SLOT(close()));
    17     this->connect(findText,SIGNAL(clicked()),
    18               this,SLOT(findClicked()));
    19     this->connect(this,
    20               SIGNAL(findPrevious(const QString&,Qt::CaseSensitivity)),
    21               this,
    22               SLOT(findPrevious_Slot(const QString&,Qt::CaseSensitivity)));
    23     this->connect(this,
    24               SIGNAL(findNext(const QString&,Qt::CaseSensitivity)),
    25               this,
    26               SLOT(findNext_Slot(const QString&,Qt::CaseSensitivity)));
    27     //窗口部件的状态
    28     caseSensCheck->setChecked(false);
    29     prevCheck->setChecked(false);
    30     findText->setEnabled(false);
    31     stopFind->setEnabled(true);
    32     this->setWindowTitle(tr("FindDialog"));
    33 
    34     //窗口布局的初始化
    35     hLayout = new QHBoxLayout;
    36     vLeftLayout = new QVBoxLayout;
    37     vRightLayout = new QVBoxLayout;
    38     vLeftLayout->addWidget(text);
    39     vLeftLayout->addWidget(caseSensCheck);
    40     vLeftLayout->addWidget(prevCheck);
    41     vRightLayout->addWidget(findText);
    42     vRightLayout->addWidget(stopFind);
    43     hLayout->addLayout(vLeftLayout);
    44     hLayout->addLayout(vRightLayout);
    45 
    46     this->setLayout(hLayout);
    47 }
    48 
    49 //向前查找槽函数
    50 void    FindDialog::findPrevious_Slot(const QString&txt,Qt::CaseSensitivity cs)
    51 {
    52     this->setWindowTitle(tr("FindPrevious"));
    53     this->update();
    54 }
    55 
    56 //向后查找槽函数
    57 void    FindDialog::findNext_Slot(const QString&txt,Qt::CaseSensitivity cs)
    58 {
    59     this->setWindowTitle(tr("FindNext"));
    60     this->update();
    61 }
    62 
    63 //查找按钮点击槽函数
    64 void    FindDialog::findClicked()
    65 {
    66     QString    txt = text->text();
    67   //获取是否大小写匹配的状态
    68     Qt::CaseSensitivity    cs =
    69         caseSensCheck->isChecked()?Qt::CaseSensitive:
    70                        Qt::CaseInsensitive;
    71     if(prevCheck->isChecked())
    72         emit    findPrevious(txt,cs);//发射向前查找信号
    73     else
    74         emit    findNext(txt,cs);//发射向后查找信号
    75 }
    76 //停止查找槽函数
    77 void    FindDialog::stopClicked()
    78 {
    79     this->close();
    80 }
    81 //查找按钮使能槽函数
    82 void    FindDialog::findBtnEnabled(const QString &txt)
    83 {
    84     findText->setEnabled(!txt.isEmpty());
    85 }
    86 //析构函数,销毁窗口部件 和 窗口布局 
    87 FindDialog::~FindDialog()
    88 {
    89     delete    text;
    90     delete    findText;
    91     delete    stopFind;
    92     delete    caseSensCheck;
    93     delete    prevCheck;
    94     delete    vLeftLayout;
    95     delete    vRightLayout;
    96     delete    hLayout;
    97 }
     //main.cpp
    1
    #include <QApplication> 2 #include<finddialog.h> 3 4 int main(int argc, char *argv[]) 5 { 6 QApplication a(argc, argv);
        //创建并显示查找窗口
    7 FindDialog* dlg = new FindDialog; 8 dlg->show(); 9 return a.exec(); 10 }
     1 //finddialog.h
     2 #ifndef FINDDIALOG_H
     3 #define FINDDIALOG_H
     4 
     5 #include <QDialog>
     6 #include<QLineEdit>
     7 #include<QCheckBox>
     8 #include<QPushButton>
     9 #include<QHBoxLayout>
    10 #include<QVBoxLayout>
    11 
    12 class FindDialog : public QDialog
    13 {
    14     Q_OBJECT
    15 public:
    16     explicit FindDialog(QWidget *parent = 0);
    17     ~FindDialog();
    18 signals:
    19 //其他槽函数    
    20 public slots:
    21     void    findBtnEnabled(const QString &txt);
    22     void    findClicked();
    23     void    stopClicked();
    24 //查找槽函数
    25 public    slots:
    26     void    findPrevious_Slot(const QString&txt,Qt::CaseSensitivity cs);
    27     void    findNext_Slot(const QString&txt,Qt::CaseSensitivity cs);
    28 //查找窗口的部件
    29 public:
    30     QLineEdit*    text;
    31     QCheckBox*    caseSensCheck;
    32     QCheckBox*    prevCheck;
    33     QPushButton*    findText;
    34     QPushButton*    stopFind;
    35 signals://自定义的查找信号
    36      void findNext(const QString &str , Qt::CaseSensitivity cs);
    37      void findPrevious(const QString &str , Qt::CaseSensitivity cs);
    38 
    39 public://查找窗口的布局
    40     QHBoxLayout*    hLayout;
    41     QVBoxLayout*    vLeftLayout;
    42     QVBoxLayout*    vRightLayout;
    43 };
    44 
    45 #endif // FINDDIALOG_H

  • 相关阅读:
    使用Junit4进行单元测试
    SourceMonitor的安装及使用
    PMD的安装及使用
    CheckStyle的安装及使用
    FindBugs的安装及使用
    【论文学习】A Study of Equivalent and Stubborn Mutation Operators using Human Analysis of Equivalence
    GitHub
    作业3
    作业2续
    作业2
  • 原文地址:https://www.cnblogs.com/wowk/p/3112742.html
Copyright © 2011-2022 走看看