标签:
对话框给用户提供了一种同应用程序进行交互的便捷方式,如系统选项、字体设置等
模态对话框:模态对话框没有消失之前用户不能与同一个应用程序的其他窗口进行交互,知道该对话框关闭。
自定义对话框
logindlg.h
#ifndef LOGINDLG_H
#define LOGINDLG_H
#include<QDialog>
//该代码的作用就是告诉编译器,QLineEdit类已经存在
class QLineEdit; //在类CLoginDlg的头文件中仅仅使用了指向QLineEdit对象的指针,因此在编译头文件时,gcc编译器不需要知道QLineEdit类的定义
class CLoginDlg:public QDialog //自定义类继承QDialog
{
Q_OBJECT //该宏的作用是启动Qt元对象的一些特性(比如支持信号和槽等),它必须放置在类定义的私有区
public:
CLoginDlg(QWidget* =0); //是构造函数,它指定一个默认值为NULL的指向QWidget的参数
//该形参定义了自定义对话框对象的父窗口部件,默认值NULL意味着自定义的对话框没有父窗口部件
public slots:
virtual void accept();
private:
QLineEdit *usrLineEdit;
QLineEdit *pwdLineEdit;
};
#endif // LOGINDLG_H
logindlg.cpp
#include<QtGui/QtGui>
#include"logindlg.h"
CLoginDlg::CLoginDlg(QWidget *parent)
:QDialog(parent)
{
QLabel *usrLabel=new QLabel(tr("用户名:"));
QLabel *pwdLabel=new QLabel(tr("密 码:"));
usrLineEdit=new QLineEdit;
pwdLineEdit=new QLineEdit;
pwdLineEdit->setEchoMode(QLineEdit::Password);
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(pwdLineEdit,1,1,1,3);
QPushButton *okBtn=new QPushButton(tr("确定"));
QPushButton *cancelBtn=new QPushButton(tr("取消"));
QHBoxLayout *btnLayout=new QHBoxLayout;
btnLayout->setSpacing(60);
btnLayout->addWidget(okBtn);
btnLayout->addWidget(cancelBtn);
QVBoxLayout *dlgLayout=new QVBoxLayout;
dlgLayout->setMargin(40); //设置内部子部件距离布局管理器边界的距离为40
dlgLayout->addLayout(gridLayout);
dlgLayout->addStretch(40); //在垂直布局管理器之间加入一个大小为40的stretch,stretch可以上下伸缩
dlgLayout->addLayout(btnLayout);
setLayout(dlgLayout);
connect(okBtn,SIGNAL(clicked()),this,SLOT(accept()));
connect(cancelBtn,SIGNAL(clicked()),this,SLOT(reject())); //reject()将会隐藏登陆对话框,并将对话框的返回代码设置为QDialog::Rejected,此时对话框将关闭,启动对话框的槽函数QDialog::exec()将返回QDialog::Rejected.
setWindowTitle(tr("登陆"));
resize(300,200); //重新设置对话框的大小为(300,200),即高为300,宽为200
}
void CLoginDlg::accept()
{
if(usrLineEdit->text().trimmed()==tr("admin")
&&pwdLineEdit->text().trimmed()==tr("admin"))
{
QDialog::accept(); //如果用户输入的全部正确,调用父类中的QDialog::accept()槽函数,该函数将关闭模态对话框,设置对话框的运行结果为QDialog::Accepted,并发送QDialog::finished(int result)信号。
}
else
{
//创建并显示模态的警告窗口
QMessageBox::warning(this,
tr("警告"),
tr("用户名或密码错误!"),
QMessageBox::Yes);
usrLineEdit->setFocus(); //将光标定位到编辑框对象
}
}
main.cpp
#include<QtGui>
#include"logindlg.h"
int main(int argc,char **argv)
{
QApplication a(argc,argv);
QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8"));
QTranslator translator; //QTranslator类提供了对文本输出的国际化的支持
{ //加大括号,是为了下及时销毁以后不再使用的栈对象
QStringList environment=QProcess::systemEnvironment(); //获取进程的环境变量
QString str;
bool bFinded=false; //定义一个查找结果的标识符
foreach(str,environment) //在获取的环境变量的列表中查找以"QTDIR="开头的字符串
{
if(str.startsWith("QTDIR="))
{
bFinded=true;
break;
}
}
if(bFinded) //该段代码的功能是给应用程序安装翻译器
{
str=str.mid(6); //通过mid()函数取得环境变量的值,即Qt的安装路径
//下面的语句相当于调用了QTranslator:;load("qt_zh_CN","$QTDIR/translations/");
bFinded=translator.load("qt_"+QLocale::system().name(), //是加载Qt的翻译文件
str.append("/translations/"));
if(bFinded)
qApp->installTranslator(&translator);
else
qDebug()<<QObject::tr("没有支持中心的Qt国际化翻译文件!");
}
else
{
qDebug()<<QObject::tr("必须设置QTDIR环境变量!");
exit(1);
}
}
CLoginDlg dlg;
return dlg.exec();
}
QMessageBox的高级应用的例子
QMessageBox box;
box.setWindowtitle(tr("警告");
box.setIcon(QMessageBox::Warning);
box.setText(tr("程序安装错误,是否退出?");
box.setStandardButtons(QMessageBox::Yes
|QMessageBox::No);
box.setDetailedText(tr("请查看安装介质有无损坏。");
switch(box.exec())
{
case QMessageBox::Yes:
//进行下一步
break;
case QMessageBox::No:
//进行下一步
break;
default:
//进行默认处理
break;
}
Qt内建对话框
标签:
原文地址:http://www.cnblogs.com/xiaoshi-com/p/5743653.html