Qt学习之Dialog

来源:互联网 发布:淘宝打字客服容易吗 编辑:程序博客网 时间:2024/05/14 04:26

//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();}