Qt学习笔记#第七章:对话框

在Qt中,对话框(Dialog)是一种常用的用户界面元素,用于与用户进行交互。Qt提供了多种类型的对话框,例如文件选择框、颜色框、字体框、输入框、消息对话框、自定义对话框等,以满足不同的需求。

文件对话框:

        通过QFileDialog类允许用户遍历系统文件,选择一个或多个文件或目录

#ifndef QFILEDIALOGTEST_H
#define QFILEDIALOGTEST_H
#include <QDialog>

#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QHBoxLayout> // 水平布局
#include <QVBoxLayout> // 垂直布局

#include <QFileDialog>

class QFileDialogTest : public QDialog
{
    Q_OBJECT

public:
    QFileDialogTest(QWidget *parent = nullptr);
    ~QFileDialogTest();

private:
    QLabel *FileNameLabel;
    QLineEdit *FileNameLineEdit;

    QPushButton *FileButton;
    QLabel *FileSizeLabel;
    QLineEdit *FileSizeLabelLineEdit;

    QPushButton *GetFileInfoButton;
private slots:
    void GetFileInfoFunc(); // 用于打开文件
    void GetFileSizeFunc(); // 用于获取文件大小

};
#endif // QFILEDIALOGTEST_H
//=======================================================
#include "qfiledialogtest.h"
QFileDialogTest::QFileDialogTest(QWidget *parent)
    : QDialog(parent)
{
    // 1:创建控件
    FileNameLabel=new QLabel("文件名称:");
    FileNameLineEdit=new QLineEdit;
    FileButton=new QPushButton("选择...");

    FileSizeLabel=new QLabel("文件大小:");
    FileSizeLabelLineEdit=new QLineEdit;

    GetFileInfoButton=new QPushButton("获取文件大小信息");

    // 2:排列布局
    QGridLayout *glayout=new QGridLayout;
    glayout->addWidget(FileNameLabel,0,0);
    glayout->addWidget(FileNameLineEdit,0,1);
    glayout->addWidget(FileButton,0,2);

    glayout->addWidget(FileSizeLabel,1,0);
    glayout->addWidget(FileSizeLabelLineEdit,1,1,1,2);

    QHBoxLayout *hlayout=new QHBoxLayout;
    hlayout->addWidget(GetFileInfoButton);


    QVBoxLayout *vlayout=new QVBoxLayout(this);
    vlayout->addLayout(glayout);
    vlayout->addLayout(hlayout);

    // 信号槽函数连接
    connect(FileButton,SIGNAL(clicked()),this,SLOT(GetFileInfoFunc()));
    connect(GetFileInfoButton,SIGNAL(clicked()),this,SLOT(GetFileSizeFunc()));
}

QFileDialogTest::~QFileDialogTest(){}

void QFileDialogTest::GetFileInfoFunc() // 用于打开文件
{
    QString strFileName=QFileDialog::getOpenFileName(this,"打开","/","Files(*)");
    FileNameLineEdit->setText(strFileName);
}

void QFileDialogTest::GetFileSizeFunc() // 用于获取文件大小
{
    // 获取单行编辑框控件里面文件路径等
    QString strFileNames=FileNameLineEdit->text();

    QFileInfo fileinfo(strFileNames);

    qint64 FileSize=fileinfo.size();

    FileSizeLabelLineEdit->setText(QString::number(FileSize));
}
  颜色对话框:

        QColorDialog类提供标准的颜色对话框,不同的系统平台显示效果有所不同

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QPushButton>
#include <QFrame>
#include <QColorDialog>
#include <QGridLayout>

class Dialog : public QDialog
{
    Q_OBJECT
public:
    Dialog(QWidget *parent = nullptr);
    ~Dialog();
private:
    QGridLayout *glayout;
    QPushButton *colorbutton;

    // QFrame类是基本控件的基类,QWidget是QFrame类型
    QFrame *colorFrame;

private slots:
    void dispcolorFunc();

};
#endif // DIALOG_H

//=================================================
#include "dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{

    setWindowTitle("颜色对话框测试");

    glayout=new QGridLayout(this);  // new一个布局对象

    colorbutton=new QPushButton("调用颜色对话框");
    colorFrame=new QFrame;

    colorFrame->setFrameShape(QFrame::Box); // 设置形状
    colorFrame->setAutoFillBackground(true); // 填充背景处理

    glayout->addWidget(colorbutton,0,0);
    glayout->addWidget(colorFrame,1,0);

    // 信号槽函数连接
    connect(colorbutton,SIGNAL(clicked()),this,SLOT(dispcolorFunc()));
}

Dialog::~Dialog(){}
void Dialog::dispcolorFunc()
{
    QColor colorvalues=QColorDialog::getColor(Qt::red);//打开一个颜色选择框对话框,并将默认选中颜色设置为红色
//QPalette是应用于QWidget及其派生类的,例如QPushButton、QLineEdit等;用于管理控件调色板(palette)的类。它定义了控件在不同状态(如正常、悬停、选中等)下的颜色和外观属性
    if(colorvalues.isValid())//检查用户是否选择了有效的颜色
    {
        colorFrame->setPalette(QPalette(colorvalues));//setPalette来设置调色板
    }
}
字体对话框:

        Qt提供字体对话框选择(字体、字号、样式等)。

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QPushButton>
#include <QLineEdit>
#include <QFontDialog>
#include <QGridLayout>

class Dialog : public QDialog
{
    Q_OBJECT
public:
    Dialog(QWidget *parent = nullptr);
    ~Dialog();
private:
    QGridLayout *glayout;
    QPushButton *fontbutton;
    QLineEdit *fontlineedit;
private slots:
    void dispFontFunc();
};
#endif // DIALOG_H
//==============================================
#include "dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    setWindowTitle("字体对话框测试");

    glayout=new QGridLayout(this);
    fontbutton=new QPushButton("调用字体对话框");
    fontlineedit=new QLineEdit;
    fontlineedit->setText("测试改变字体颜色大小");
    glayout->addWidget(fontbutton,0,0);
    glayout->addWidget(fontlineedit,0,1);

    connect(fontbutton,SIGNAL(clicked()),this,SLOT(dispFontFunc()));
}

Dialog::~Dialog(){}
void Dialog::dispFontFunc()
{
    bool bOk;
    QFont font=QFontDialog::getFont(&bOk);

    if(bOK)
        fontlineedit->setFont(font);

}

输入对话框:

        QInputDialog类中的控件由自己决定,方便定制开发使用

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QGridLayout>
#include <QLineEdit>
#include <QPushButton>
#include <QInputDialog>

class Dialog : public QDialog
{
    Q_OBJECT
public:
    Dialog(QWidget *parent = nullptr);
    ~Dialog();

private:
    QGridLayout *glayout;

    QPushButton *inputstudentnobutton;
    QLineEdit *inputstudentnobuttonLineEdit;

    QPushButton *inputstudentsexbutton;
    QLineEdit *inputstudentsexbuttonLineEdit;

private slots:
    void  modifystudentnumber();
    void  modifystudentsex();
};
#endif // DIALOG_H

//================================================
#include "dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    resize(300,130);
    setWindowTitle("标准对话框测试");

    // 布局
    glayout=new QGridLayout(this);

    inputstudentnobutton=new QPushButton;
    inputstudentnobutton->setText("学号:");
    inputstudentnobuttonLineEdit=new QLineEdit("00000001");


    inputstudentsexbutton=new QPushButton;
    inputstudentsexbutton->setText("性别:");
    inputstudentsexbuttonLineEdit=new QLineEdit("男");

    glayout->addWidget(inputstudentnobutton,0,0);
    glayout->addWidget(inputstudentnobuttonLineEdit,0,1);
    glayout->addWidget(inputstudentsexbutton,1,0);
    glayout->addWidget(inputstudentsexbuttonLineEdit,1,1);

    connect(inputstudentnobutton,SIGNAL(clicked()),this,SLOT(modifystudentnumber()));
    connect(inputstudentsexbutton,SIGNAL(clicked()),this,SLOT(modifystudentsex()));

}

Dialog::~Dialog(){}

void  Dialog::modifystudentnumber()
{
    bool isbool;
    QString strText=QInputDialog::getText(this,"标准输入对话框","请输入学号:",
            QLineEdit::Normal,inputstudentnobuttonLineEdit->text(),&isbool);
    if(isbool && !strText.isEmpty())
    {
        inputstudentnobuttonLineEdit->setText(strText);
    }
}

void  Dialog::modifystudentsex()
{
    QStringList strSexItems;
    strSexItems<<"男"<<"女";

    bool isbool;
    QString strsexItem=QInputDialog::getItem(this,"标准输入对话框",
                                            "请选择性别:",strSexItems,0,false,&isbool);
    if(isbool && !strsexItem.isEmpty())
    {
        inputstudentsexbuttonLineEdit->setText(strsexItem);
    }
}
消息对话框:

        Qt提供消息对话框,它是一个常用的对话框模式,专门用于显示和提示性消息,用户可通过单击标准按钮来响应用户需求。

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QLabel>
#include <QPushButton>
#include <QGridLayout>
#include <QMessageBox>

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = nullptr);
    ~Dialog();

private:
    QGridLayout *glayout;

    QLabel *displabel;
    QPushButton *questionbutton; // 问题消息框命令按钮
    QPushButton *informationbutton; // 信息消息框命令按钮
    QPushButton *warningbutton; // 警告消息框命令按钮
    QPushButton *criticalbutton; // 错误消息框命令按钮
    QPushButton *aboutbutton; // 关于消息框命令按钮
    QPushButton *aboutqtbutton; //

private slots:
    void displayquestionMsg();
    void displayinformationMsg();
    void displaywarningMsg();
    void displaycriticalMsg();
    void displayaboutMsg();
    void displayaboutqtMsg();

};
#endif // DIALOG_H
//===============================================
#include "dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    resize(320,150);

    glayout=new QGridLayout(this);

    displabel=new QLabel("请你选择一个消息框");

    questionbutton=new QPushButton("questionMsg"); // 问题消息框命令按钮
    informationbutton=new QPushButton("informationMsg"); // 信息消息框命令按钮
    warningbutton=new QPushButton("warningMsg"); // 警告消息框命令按钮
    criticalbutton=new QPushButton("criticalMsg"); // 错误消息框命令按钮
    aboutbutton=new QPushButton("aboutMsg"); // 关于消息框命令按钮
    aboutqtbutton=new QPushButton("aboutQtMsg"); //

    glayout->addWidget(displabel,0,0,1,2);
    glayout->addWidget(questionbutton,1,0);
    glayout->addWidget(informationbutton,1,1);
    glayout->addWidget(warningbutton,2,0);
    glayout->addWidget(criticalbutton,2,1);
    glayout->addWidget(aboutbutton,3,0);
    glayout->addWidget(aboutqtbutton,3,1);

    connect(questionbutton,SIGNAL(clicked()),this,SLOT(displayquestionMsg()));
    connect(informationbutton,SIGNAL(clicked()),this,SLOT(displayinformationMsg()));
    connect(warningbutton,SIGNAL(clicked()),this,SLOT(displaywarningMsg()));
    connect(criticalbutton,SIGNAL(clicked()),this,SLOT(displaycriticalMsg()));
    connect(aboutbutton,SIGNAL(clicked()),this,SLOT(displayaboutMsg()));
    connect(aboutqtbutton,SIGNAL(clicked()),this,SLOT(displayaboutqtMsg()));

}

Dialog::~Dialog(){}

void Dialog::displayquestionMsg()
{
    displabel->setText("question QMessageBox");

    switch(QMessageBox::question(this,"Question消息框",
                                 "你是否想退出程序应用,请选择?",QMessageBox::Ok|QMessageBox::Cancel,QMessageBox::Ok))
    {
    case QMessageBox::Ok:
        displabel->setText("你选择questionMsg命令按钮当中的button/Ok!");
        break;
    case QMessageBox::Cancel:
        displabel->setText("你选择questionMsg命令按钮当中的button/Cancel!");
        break;
    default:
        break;
    }
    return ;
}

void Dialog::displayinformationMsg()
{
    displabel->setText("information QMessageBox");
    QMessageBox::information(this,"Information消息框","Information消息框测试成功");
    return ;
}
void Dialog::displaywarningMsg()
{
    displabel->setText("warning QMessageBox");

    switch(QMessageBox::warning(this,"Warning消息框",
                                "是否删除,请注意操作安全?",
        QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel,QMessageBox::Save))
    {
    case QMessageBox::Save:
        displabel->setText("选择button/Save!");
        break;
    case QMessageBox::Discard:
        displabel->setText("选择button/Discard!");
        break;
    case QMessageBox::Cancel:
        displabel->setText("选择button/Cancel!");
        break;
    default:
        break;
    }
    return ;
}
void Dialog::displaycriticalMsg()
{
    displabel->setText("critical QMessageBox");
    QMessageBox::critical(this,"critical消息框","错误,请重新检查?");
    return ;
}
void Dialog::displayaboutMsg()
{
    displabel->setText("about QMessageBox");
    QMessageBox::about(this,"about消息框","测试Qt about消息框");
    return ;

}
void Dialog::displayaboutqtMsg()
{
    displabel->setText("aboutQt QMessageBox");
    QMessageBox::aboutQt(this,"aboutQt消息框测试");
    return ;
}
自定义对话框:

        自己制定一的QMessageBox框

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QMessageBox>
#include <QLabel>
#include <QGridLayout>
#include <QPushButton>

class Dialog : public QDialog
{
    Q_OBJECT
public:
    Dialog(QWidget *parent = nullptr);
    ~Dialog();
private:
    QLabel *labelmsg,*labeldispmsg;
    QPushButton *msgbutton;

    QGridLayout *glayout;

private slots:
    void customMsg();
};
#endif // DIALOG_H
//=============================================
#include "dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{

    resize(300,110);

    glayout=new QGridLayout(this);

    labelmsg=new QLabel("自定义消息框");
    msgbutton=new QPushButton("测试操作");

    labeldispmsg=new QLabel("未测试状态");

    glayout->addWidget(labelmsg,0,0);
    glayout->addWidget(msgbutton,0,1);
    glayout->addWidget(labeldispmsg,1,0,1,1);

    connect(msgbutton,SIGNAL(clicked()),this,SLOT(customMsg()));

}

Dialog::~Dialog(){}

void Dialog::customMsg()
{
    QMessageBox cMsgBox;
    cMsgBox.setWindowTitle("自定义消息框");

    // 添加按钮
    QPushButton *yes=cMsgBox.addButton("YES",QMessageBox::ActionRole);
    QPushButton *no=cMsgBox.addButton("NO",QMessageBox::ActionRole);

    // 添加图标
    cMsgBox.setIconPixmap(QPixmap("d:\\xxx.png"));
    cMsgBox.exec();

    // 判断用户点击按钮 yes no
    if(cMsgBox.clickedButton()==yes)
    {
        labeldispmsg->setText("用户点击YES按钮");
    }
    else if(cMsgBox.clickedButton()==no)
    {
        labeldispmsg->setText("用户点击NO按钮");
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值