Qt5开发学习之Qt基本对话框(四)
来源:互联网 发布:网络直播技术的意义 编辑:程序博客网 时间:2024/06/08 12:20
基本对话框包括标准文件对话框(QFileDialog)、标准颜色对话框(QColorDialog)、标准字体对话框(QFontDialog)、标准输入对话框(QInputDialog)、消息对话框(QMessageBox)。
各种基本对话框由各自的静态函数来完成其功能:
下面的实例,将各种对话框集合成一个项目进行试验。首先创建一个GUI项目,基类选择QDialog;然后在头文件包含<QTextCodec>
;在main.cpp
添加如下代码以便显示中文:QTextCodec::setCodecForLocale(QTextCodec::codecForLocale());
Dialog类用于显示整体的对话框,其中提供五个标准对话框功能
头文件 dialog.h
#include <QDialog>#include <QString>#include <QTextCodec>#include <QLabel>#include <QPushButton>#include <QLineEdit>#include <QGridLayout>#include <QFileDialog>#include <QColorDialog>#include <QFontDialog>#include "inputdlg.h"#include "msgboxdlg.h"class Dialog : public QDialog{ Q_OBJECTpublic: Dialog(QWidget *parent = 0); ~Dialog();private: // 标准文件对话框 QPushButton *fileButton; QLineEdit *fileEdit; // 标准颜色对话框 QPushButton *colorButton; QFrame *colorFrame; // 标准字体对话框 QPushButton *fontButton; QLineEdit *fontEdit; // 标准输入对话框 QPushButton *inputButton; InputDlg *inputDlg; // 消息对话框 QPushButton *msgButton; MsgBoxDlg *msgDlg;private slots: // 文件对话框槽函数 void showFileDialog(); // 标准颜色对话框槽函数 void showColorDialog(); // 标准字体对话框槽函数 void showFontDialog(); // 弹出标准输入框的槽函数 void showInputDialog(); // 弹出消息对话框 void showMsgDlg();};
dialog.cpp
#include "dialog.h"Dialog::Dialog(QWidget *parent) : QDialog(parent){ setWindowTitle(tr("对话框实例")); this->resize(400, 400); QGridLayout *mainLayout = new QGridLayout(this); // 标准文件对话框控件、槽函数 fileButton = new QPushButton(tr("标准文件对话框")); fileEdit = new QLineEdit; mainLayout->addWidget(fileButton, 0, 0); mainLayout->addWidget(fileEdit, 0, 1); connect(fileButton, &QPushButton::clicked, this, &Dialog::showFileDialog); // 标准颜色对话框控件、槽函数 colorButton = new QPushButton(tr("标准颜色对话框")); // QFrame用于根据用户选择的不同的颜色更新的不同的背景 colorFrame = new QFrame; colorFrame->setFrameShape(QFrame::Box); colorFrame->setAutoFillBackground(true); mainLayout->addWidget(colorButton, 1, 0); mainLayout->addWidget(colorFrame, 1, 1); connect(colorButton, &QPushButton::clicked, this, &Dialog::showColorDialog); // 标准字体对话框控件、槽函数 fontButton = new QPushButton(tr("标准字体对话框")); fontEdit = new QLineEdit; fontEdit->setText(tr("Hello shige")); mainLayout->addWidget(fontButton, 2, 0); mainLayout->addWidget(fontEdit, 2, 1); connect(fontButton, &QPushButton::clicked, this, &Dialog::showFontDialog); // 标准输入框控件、槽函数 inputButton = new QPushButton(tr("标准输入对话框")); mainLayout->addWidget(inputButton, 3, 0); connect(inputButton, &QPushButton::clicked, this, &Dialog::showInputDialog); // 消息框控件、槽函数 msgButton = new QPushButton(tr("标准消息对话框")); mainLayout->addWidget(msgButton, 3, 1); connect(msgButton, &QPushButton::clicked, this, &Dialog::showMsgDlg);}Dialog::~Dialog(){}void Dialog::showFileDialog(){ // 获取打开的文件对话框中选中的文件的名称,getOpenFileName()函数 QString s = QFileDialog::getOpenFileName(this, "open file dialog", "/"); // 将获取到的名称添加到编辑框中 fileEdit->setText(s);}void Dialog::showColorDialog(){ // 调用颜色对话框选择颜色,getColor()函数 QColor color = QColorDialog::getColor(Qt::red); // 将在调色板选择的颜色放到背景板中 if (color.isValid()) { colorFrame->setPalette((QPalette)color); }}void Dialog::showFontDialog(){ bool ok; // 调用getFont()函数,如果用户点击ok就改变字体 QFont f = QFontDialog::getFont(&ok); if (ok) { fontEdit->setFont(f); }}void Dialog::showInputDialog(){ inputDlg = new InputDlg(this); inputDlg->show();}void Dialog::showMsgDlg(){ msgDlg = new MsgBoxDlg(this); msgDlg->show();}
在项目中新建InputDlg类,用于实现各种标准输入框的功能:
inputdlg.h
#include <QDialog>#include <QLabel>#include <QLineEdit>#include <QPushButton>#include <QGridLayout>#include <QInputDialog>class InputDlg : public QDialog{ Q_OBJECTpublic: explicit InputDlg(QDialog *parent = 0);private: QLabel *nameLabel1; QLabel *nameLabel2; QPushButton *nameButton; QLabel *sexLabel1; QLabel *sexLabel2; QPushButton *sexButton; QLabel *ageLabel1; QLabel *ageLabel2; QPushButton *ageButton; QLabel *scoreLabel1; QLabel *scoreLabel2; QPushButton *scoreButton; QGridLayout *mainLayout;private slots: void changeName(); void changeSex(); void changeAge(); void changeScore();};
inputdlg.cpp
#include "inputdlg.h"InputDlg::InputDlg(QDialog *parent) : QDialog(parent){ nameLabel1 = new QLabel(tr("name :")); nameLabel2 = new QLabel(tr("twisted")); nameLabel2->setFrameStyle(QFrame::Panel | QFrame::Sunken); nameButton = new QPushButton(tr("change name")); connect(nameButton, &QPushButton::clicked, this, &InputDlg::changeName); sexLabel1 = new QLabel(tr("sex :")); sexLabel2 = new QLabel(tr("man")); sexLabel2->setFrameStyle(QFrame::Panel | QFrame::Sunken); sexButton = new QPushButton(tr("change sex")); connect(sexButton, &QPushButton::clicked, this, &InputDlg::changeSex); ageLabel1 = new QLabel(tr("age :")); ageLabel2 = new QLabel(tr("25")); ageLabel2->setFrameStyle(QFrame::Panel | QFrame::Sunken); ageButton = new QPushButton(tr("change age")); connect(ageButton, &QPushButton::clicked, this, &InputDlg::changeAge); scoreLabel1 = new QLabel(tr("score :")); scoreLabel2 = new QLabel(tr("100")); scoreLabel2->setFrameStyle(QFrame::Panel | QFrame::Sunken); scoreButton = new QPushButton(tr("change score")); connect(scoreButton, &QPushButton::clicked, this, &InputDlg::changeScore); mainLayout = new QGridLayout(this); mainLayout->addWidget(nameLabel1, 0, 0); mainLayout->addWidget(nameLabel2, 0, 1); mainLayout->addWidget(nameButton, 0, 2); mainLayout->addWidget(sexLabel1, 1, 0); mainLayout->addWidget(sexLabel2, 1, 1); mainLayout->addWidget(sexButton, 1, 2); mainLayout->addWidget(ageLabel1, 2, 0); mainLayout->addWidget(ageLabel2, 2, 1); mainLayout->addWidget(ageButton, 2, 2); mainLayout->addWidget(scoreLabel1, 3, 0); mainLayout->addWidget(scoreLabel2, 3, 1); mainLayout->addWidget(scoreButton, 3, 2);}// 标准字符串输入框void InputDlg::changeName(){ // 字符串输入框由getText()函数来完成 bool ok; QString name = QInputDialog::getText(this, tr("字符串输入框"), tr("plz input the name"), QLineEdit::Normal, nameLabel2->text(), &ok); if (ok && !name.isEmpty()) { nameLabel2->setText(name); }}// 标准条目选择对话框void InputDlg::changeSex(){ // 条目选择对话框由getItem()函数来完成 // 下拉列表 QStringList sexItems; sexItems << tr("man") << tr("women"); bool ok; QString sex = QInputDialog::getItem(this, tr("条目选择框"), tr("plz select the sex"), sexItems, 0, false, &ok); if (ok && !sex.isEmpty()) { sexLabel2->setText(sex); }}// 标准int类型输入框void InputDlg::changeAge(){ bool ok; int age = QInputDialog::getInt(this, tr("整形输入框"), tr("plz intput the age"), ageLabel2->text().toInt(&ok), 0, 100, 1, &ok); if (ok) { ageLabel2->setText(tr("%1").arg(age)); }}void InputDlg::changeScore(){ bool ok; double score = QInputDialog::getDouble(this, tr("浮点型输入框"), tr("plz intput the score"), scoreLabel2->text().toDouble(&ok), 0, 100, 1, &ok); if (ok) { scoreLabel2->setText(tr("%1").arg(score)); }}
新建MsgBoxDlg类,用于实现各种消息对话框的功能
消息对话框用于弹出各种各样的消息为用户提供提示与提醒,Qt提供了QMessageBox
类来支持此项功能。 Question
消息框为正常操作提供一个简单的询问,Information
消息框为正常操作提供一个提示,Warning
消息框提醒用户发生了一个错误,Critical
消息框警告用户发生了一个严重错误。
msgboxdlg.h
#include <QDialog>#include <QLabel>#include <QPushButton>#include <QGridLayout>#include <QMessageBox>class MsgBoxDlg : public QDialog{ Q_OBJECTpublic: explicit MsgBoxDlg(QDialog *parent = 0);private: QLabel *label; QPushButton *questionBtn; QPushButton *informationBtn; QPushButton *warningBtn; QPushButton *criticalBtn; QPushButton *aboutBtn; QPushButton *aboutQtBtn; QGridLayout *mainLayout;private slots: void showQuestion(); void showInfomation(); void showWarning(); void showCritical(); void showAbout(); void showAboutQt();};
msgboxdlg.cpp
#include "msgboxdlg.h"MsgBoxDlg::MsgBoxDlg(QDialog *parent) : QDialog(parent){ setWindowTitle(tr("各种消息框")); mainLayout = new QGridLayout(this); label = new QLabel(tr("plz select a Msg")); mainLayout->addWidget(label, 0, 0, 1, 2); questionBtn = new QPushButton(tr("qusetion Msg")); connect(questionBtn, &QPushButton::clicked, this, &MsgBoxDlg::showQuestion); mainLayout->addWidget(questionBtn,1, 0); informationBtn = new QPushButton(tr("information Msg")); connect(informationBtn, &QPushButton::clicked, this, &MsgBoxDlg::showInfomation); mainLayout->addWidget(informationBtn, 1, 1); warningBtn = new QPushButton(tr("warning Msg")); connect(warningBtn, &QPushButton::clicked, this, &MsgBoxDlg::showWarning); mainLayout->addWidget(warningBtn, 2, 0); criticalBtn = new QPushButton(tr("critical Msg")); connect(criticalBtn, &QPushButton::clicked, this, &MsgBoxDlg::showCritical); mainLayout->addWidget(criticalBtn, 2, 1); aboutBtn = new QPushButton(tr("about Msg")); connect(aboutBtn, &QPushButton::clicked, this, &MsgBoxDlg::showAbout); mainLayout->addWidget(aboutBtn, 3, 0); aboutQtBtn = new QPushButton(tr("aboutQt Msg")); connect(aboutQtBtn, &QPushButton::clicked, this, &MsgBoxDlg::showAboutQt); mainLayout->addWidget(aboutQtBtn, 3, 1);}void MsgBoxDlg::showQuestion(){ // 使用QMessageBox::question()函数完成 label->setText(tr("Question Msg Box")); switch (QMessageBox::question(this, tr("question Msg"), tr("question has over, did ok?"), QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Ok)) { case QMessageBox::Ok: label->setText(tr("OK")); break; case QMessageBox::Cancel: label->setText(tr("CANCEL")); break; default: break; } return;}void MsgBoxDlg::showInfomation(){ // 使用QMessageBox::information()函数完成 label->setText(tr("Information Msg Box")); QMessageBox::information(this, tr("information Msg"), tr("this is a information")); return;}void MsgBoxDlg::showWarning(){ // 使用QMessageBox::warning()函数完成 label->setText(tr("Warning Msg Box")); switch ( QMessageBox::warning(this, tr("warning Msg"), tr("do you want to save?"), QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Save)) { case QMessageBox::Save: label->setText(tr("SAVE")); break; case QMessageBox::Discard: label->setText(tr("discard")); break; case QMessageBox::Cancel: label->setText(tr("CANCEL")); break; default: break; } return;}void MsgBoxDlg::showCritical(){ // 使用QMessageBox::cirtical()函数完成,有错误时使用 label->setText(tr("Critical Msg Box")); QMessageBox::critical(this, tr("critical Msg"), tr("this is a critical box")); return;}void MsgBoxDlg::showAbout(){ // 使用QMessageBox::about()函数完成 label->setText(tr("About Msg Box")); QMessageBox::about(this, tr("about Msg"), tr("this is a about box")); return;}void MsgBoxDlg::showAboutQt(){ // 使用QMessageBox::aboutQt()函数完成 label->setText(tr("AboutQt Msg Box")); QMessageBox::aboutQt(this, tr("aboutQt Msg")); return;}
阅读全文
0 0
- Qt5开发学习之Qt基本对话框(四)
- Qt5基本对话框学习
- QT5 学习之路04---QT5基本对话框1
- QT5 学习之路05---QT5基本对话框2
- QT5 学习之路06---QT5基本对话框3
- QT学习 之 对话框 (四) 字体对话框、消息对话框、文件对话框、进程对话框
- Qt5开发学习之Qt概述(一)
- qt学习笔记(四)之对话框-Qt内建对话框
- qt学习笔记(四)之对话框-Qt内建对话框 .
- qt学习笔记(四)之对话框-Qt内建对话框
- Qt5基础(三)Qt登录对话框学习笔记
- QT5入门之6 - Qt提示对话框
- Qt5开发学习之Qt工具类与简单算法(二)
- Qt之GUI学习笔记(四)——创建对话框
- Qt基本对话框之文件对话框,颜色对话框,字体对话框
- Qt5基本对话框
- Qt5开发学习之事件(十三)
- QT5 学习之路17---对话框简介
- androidstudio动态调试smali
- Sprite精灵帧图片
- 随机数
- 网易云视频播放器不使用Service实现后台播放
- 动态规划之最短路径浅解
- Qt5开发学习之Qt基本对话框(四)
- 【牛腩】div id与div class区别及使用
- 精灵帧动画的实现
- Python2.7缺少zlib解决
- vue学习过程遇到问题(一)
- HDU6047-Maximum Sequence
- vue引入css
- 粒子系统的实现
- 基于机器学习对于短波通讯抗干扰可行性分析