对话框-QDialog

对话框给用户提供了一种同应用程序进行交互的便捷方式,如系统选项、字体设置等

模态对话框:模态对话框没有消失之前用户不能与同一个应用程序的其他窗口进行交互,知道该对话框关闭。

自定义对话框

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内建对话框




				
时间: 2024-07-29 11:44:55

对话框-QDialog的相关文章

C/C++ -- Gui编程 -- Qt库的使用 -- 对话框QDialog

模态对话框 -----源文件main.cpp(工程QtDialog)----- 1 #include "qtdialog.h" 2 #include <QApplication> 3 #include <QTextCodec> 4 5 int main(int argc, char *argv[]) 6 { 7 QApplication app(argc, argv); 8 QTextCodec::setCodecForCStrings(QTextCodec::

对话框Dialog

QMainWindow QMainWindow是 Qt 框架带来的一个预定义好的主窗口类. 主窗口,就是一个普通意义上的应用程序(不是指游戏之类的那种)最顶层的窗口.通常是由一个标题栏,一个菜单栏,若干工具栏和一个任务栏.在这些子组件之间则是我们的工作区. 通过添加动作来添加菜单和工具栏等,比如添加一个打开菜单和工具 1 QAction *openaction; 2 openaction = new QAction(QIcon(":/img/open"),tr("&O

QT学习二 按钮新建对话框

mainwindow新建方法MainWindowOpen打开一个新的对话框 mainWindow.h 1 #ifndef MAINWINDOW_H 2 #define MAINWINDOW_H 3 4 #include <QMainWindow> 5 6 namespace Ui { 7 class MainWindow; 8 } 9 10 class MainWindow : public QMainWindow 11 { 12 Q_OBJECT 13 14 public: 15 expli

Qt版音乐播放器

    Qt版音乐播放器 转载请标明出处:牟尼的专栏 http://blog.csdn.net/u012027907 一.关于Qt 1.1 什么是Qt Qt是一个跨平台应用程序和UI开发框架.使用Qt只需一次性开发应用程序,无需重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序. Qt Creator是全新的跨平台Qt IDE,可单独使用,也可与Qt库和开发工具组成一套完整的SDK,其中包括:高级C++代码编辑器,项目和集成管理工具,集成的上下文相关的帮助系统,图形化调试器,代码管理

Qt程序设计

1.与STL对应Qt库有自己的容器类:QVector<T>.QList<T>.QLinkedList<T>.QStack<T>.QQueue<T>.QMap<K,T>.QHash<K,T>等Qt库的容器的基本操作与STL库基本相同,但是具体实现不同.对于元素的访问支持3种方式:(1)通过下标访问(2)通过迭代器访问(3)通过成员函数访问(比如value(idx)带越界检测的访问,at(idx)不带越界检查的访问)与STL库

QT表单样式规则

1.全局匹配: *,匹配所有的Widgets 2.类型匹配:QPushButton.QComboBox等,匹配该类的示例及其子类 3.属性匹配:通过属性来作为过滤选项,对指定的属性(可以是动态属性,例如QObject的setProperty接口),例如 QLineEdit[readOnly="true"] 对于QLineEdit只读的控件来自定义表单样式.也可以使用~=符号来对属性进行限制: 使用~=来测试是否一个QT属性QStringList包含一个执行的QString,例如: *[

在visualstudio中使用Qt

1.  说明 在此说明一下IDE跟封装的之间的关系,他们之间本质上来说没有关系,是可以多对对的关系. Qt开发是个比较泛的概念,Qt是由很多一系列类组成的整体,就像boost里面也有很多的类,而boost是一个整体的概念.同样,MFC也是一个比较泛的概念,里面有很多类. 这三种都是所谓的编程或封装的类. visual studio是VC开发的一个IDE,eclipse似乎也可以作为VC开发的IDE.记事本也是个IDE,只是比较简陋.QtCreator也是个IDE. visual studio这个

Qt-窗口部件概念介绍

前言:包括基础窗口部件QWidget.对话框QDialog.QFrame类族 .按钮部件.行编辑器.数值设定框以及滑块部件. 一.基础窗口部件QWidget 窗口部件(Widget)是Qt中建立用户界面的主要元素.像主窗口.对话框.标签.还有按钮.文本输入框等都是窗口部件. QWidget类是所有用户界面对象的基类,被称为基础窗口部件. 在Qt中,把没有嵌入到其他部件中的部件称为窗口,一般的,窗口都有边框和标题栏. QWidget的构造函数有两个参数:QWidget * parent = 0和Q

QDialog 模态对话框与事件循环

起源 qtcn中文论坛中有网友问到: 假设程序正常运行时,只有一个简单的窗体A,此时只有一个GUI主线程,在这个主线程中有一个事件循环处理窗体上的事件.当此程序运行到某阶段时,弹出一个模态窗体B(书上说模态窗体是有其自己的事件循环的),此时模态窗体B是否会有一个对应的子线程处理其事件循环? 这儿其实有两个问题: 模态对话框 和 事件循环 没有必然联系 事件循环 和 子线程 没有必然联系 题外: 如果进一步呢?其实我们还可以说: 模态对话框 和 QDialog 没必要联系 QDialog 对话框