Qt学习之Dialog

//mydialog.h

#ifndef MYDIALOG_H
#define MYDIALOG_H
#include<QtGui/QDialog>
//#include<QLineEdit>//也可以不要class QLineEdit;直接使用这种声明方式
class QLineEdit;
//该行代码的作用是告诉编译器,QlineEdit已经存在,这样做有如下好处
//首先,它减小了头文件的大小,增加了编译的速度(特别是当头文件被其他头文件多次包含引用时);
//其次,这样做可以避免因包含头文件的顺序不当而链接错误,特别是在大的工程当中更应该避免随意在
//一个头文件中包含另一个头文件。
class CMydialog:public QDialog
{
    Q_OBJECT  //启动Qt元对象系统的一些特性(比如支持信号与槽)
                //它必须放置到类定义的私有区
public:
    CMydialog(QWidget* = 0);//是构造函数,它指定了一个默认值为NULL 的指向QWidget的参数
                            //该形参定义了自定义对话框对象的父窗口部件,默认值NULL意味着
                            //自定义的对话框没有父窗口部件
public slots:
    virtual void accept();
private:
    QLineEdit* usrLineEdit;
    QLineEdit* pwLineEdit;
};
#endif // MYDIALOG_H

//mydialog.cpp

#include "mydialog.h"
#include "QtGui/QtGui"
//类CMydialog的构造函数
CMydialog::CMydialog(QWidget* parent): QDialog(parent)
{
    QLabel* usrLabel = new QLabel(trUtf8("用户名 :"));
    QLabel* pwdLabel = new QLabel(trUtf8("密码 :"));
    usrLineEdit = new QLineEdit;
    pwLineEdit  = new QLineEdit;
    pwLineEdit->setEchoMode(QLineEdit::PasswordEchoOnEdit);//设置密码编辑框对象pwdLineEidt的内容显示方式为“×”
                                                 /* 显示方式还有一下几种:
                                                  *QLineEdit::Normal默认显示,显示用户输入的内容
                                                  *QLineEdit::Password显示星号
                                                  *QLineEdit::NoEcho不显示用会输入的内容
                                                  ×QLineEdit::PasswordEchoOnEdit仅仅用户在行编辑框里编辑文本
                                                  ×时,才显示用户输入的字符,而在用户完成编辑后以星号代替输入的内容
                                                  */
    /*创建一个布局管理器对象,并将窗口部件添加到该布局管理器中
     *gridlayout->addWidget将先前生成的标签和行编辑框添加到网络管理器QGriLayout中
     *gridlayout->addWidget中有5个参数,第一个实参指出那个窗口部件将被放置在网络布局管理器中
     *后四个参数确定了行编辑框对象在网络布局管理器的位置,前两个实参分别表示行和列的位置(行号和列号)
     *后两个分别表示行和列的跨度
     *其实这里面位置信息都是相对的
     */
    QGridLayout* gridlayout = new QGridLayout;
    gridlayout->addWidget(usrLabel,0,0,1,1);
    gridlayout->addWidget(usrLineEdit,0,1,1,3);
    gridlayout->addWidget(pwdLabel,1,0,1,1);
    gridlayout->addWidget(pwLineEdit,1,1,1,3);

    /*创建两个按钮*/
    QPushButton* okBtn     =new QPushButton(trUtf8("确定"));
    QPushButton* cancelBtn     =new QPushButton(trUtf8("取消"));
    /*创建水平布局管理器
     *设置水平布局管理器对象内部窗口部件直接的间隔为60
     *将两个按钮加入到水平管理器中
     *按照两个部件的安放的先后顺序从左到右排布
     */
    QHBoxLayout* btnLauout     =new QHBoxLayout;
    btnLauout->setSpacing(60);
    btnLauout->addWidget(okBtn);
    btnLauout->addWidget(cancelBtn);
    /*
     *创建垂直布局管理器
     *该管理器将排布和管理先前创建的所有的布局管理器,进而完成对所有子窗口部件的管理
     *dlgLayout->setMargin(40);设置边框的宽度为40
     *dlgLayout->addStretch(40);设置内部直接的默认的距离为40,同时当上下拉伸对话框的高度时,该strech可以自由伸缩
     *从而保证gridlayout和btnLauout管理器内部各窗口部件的高度已经彼此间的垂直距离保持不变
     */
    QVBoxLayout* dlgLayout = new QVBoxLayout;
    dlgLayout->setMargin(40);
    dlgLayout->addLayout(gridlayout);
    dlgLayout->addStretch(40);
    dlgLayout->addLayout(btnLauout);
    setLayout(dlgLayout);
    connect(okBtn,SIGNAL(clicked()),this,SLOT(accept()));
    connect(cancelBtn,SIGNAL(clicked()),this,SLOT(reject()));
    setWindowTitle(trUtf8("登录"));
    resize(300,200);
}
void CMydialog::accept()
{
    /*QString::trimmed()移除在字符串开头和结尾的空白字符*/
    if(usrLineEdit->text().trimmed() == trUtf8("lcf")
            &&pwLineEdit->text() ==trUtf8("lcf"))
    {
        QDialog::accept();
    }
    else
    {
        QMessageBox::warning(this,trUtf8("警告"),
                                  trUtf8("用户名或密码错误!!!"),
                                  QMessageBox::Yes);
    }
}

//main.cpp

#include <QApplication>
#include <QTranslator>
#include <QProcess>
#include <QLocale>
#include <QLibraryInfo>
#include <QDebug>
#include <QtGui/QtGui>
#include"mydialog.h"
int main(int argc,char* argv[])
{
  QApplication app(argc, argv);
  QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));
  CMydialog mydialog;
  QMessageBox box;
  QTranslator translator;
  {
          QStringList environment = QProcess::systemEnvironment();
          QString str;
          bool bFinded =false;
      foreach(str,environment)
      {
          if(str.startsWith("QTDIR="))
          {
              bFinded =true;
              break;
          }
      }
      if(bFinded)
      {
          str=str.mid(6);
          bFinded =translator.load("qt_"+QLocale::system().name(),
                                   str.append("/translations"));
          if(bFinded)
              qApp->installTranslator(&translator);
          else
          {
             // qDebug() << QObject::trUtf8("没有中文");
          box.setWindowTitle("warning");
           box.setIcon(QMessageBox::Warning);
           box.setText("没有支持中文的国际化翻译软件!!");
           box.setStandardButtons(QMessageBox::Yes);
           box.exec();
          }

      }
      else
      {
          //qDebug() << QObject::trUtf8("必须设置");
          box.setWindowTitle("warning");
           box.setIcon(QMessageBox::Warning);
           box.setText("必须设置QTDIR环境变量!!");
           box.setStandardButtons(QMessageBox::Yes);
           box.exec();
          exit(1);
      }
  }
  return mydialog.exec();
}

Qt学习之Dialog_第1张图片

你可能感兴趣的:(网络,Class,dialog,qt,编译器,Signal)