您的位置:首页 > 编程语言 > Qt开发

qt学习之各种对话框的实现

2017-07-31 22:32 513 查看
1 目的:实现1 颜色对话框
2  实现颜色标准对话框

3 实现字体标准对话框

4 实现标准输入对话框

5 实现标准消息对话框

6 实现自定义对话框

 代码实现

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QFileDialog>
#include <QColorDialog>
#include <QFontDialog>
#include <QInputDialog>
#include <QMessageBox>
#include <QPushButton>
#include <QLineEdit>
#include <QFrame>
#include "inputdialog.h"
#include "messagedialog.h"
#include "customdialog.h"
class Dialog : public QDialog
{
Q_OBJECT

public:
Dialog(QWidget *parent = 0);
~Dialog();
private:
QFileDialog *FileDialog;
QColorDialog *ColorDialog;
QFontDialog *FontDialog;
InputDialog *MInputDialog;
QMessageBox *MessageBox;
QPushButton *FilePushButton;
QPushButton *ColorPushButton;
QPushButton *FontPushButton;
QPushButton *InputButton;
QPushButton *MegButton;
QPushButton *CustomButton;
QLineEdit *FileLineEdit;
QFrame *ColorFrame;
QLineEdit *FontEditDialog;
MessageDialog *MyMessageDialog;
private slots:
void showFileDialog();
void showColorDialog();
void showFontDialog();
void showInputDialog();
void showMsgDialog();
void showCustomDialog();
};

#endif // DIALOG_H
customdialog.h

#ifndef CUSTOMDIALOG_H

#define CUSTOMDIALOG_H

#include <QLabel>

#include <QFrame>

#include <QPicture>

#include <QPushButton>

#include <QDialog>

class CustomDialog : public QDialog

{

Q_OBJECT

public:

CustomDialog(QWidget *parent = 0);

private:

QLabel *label;

QPushButton *YesButton;

QPushButton *NoButton;

QPushButton *CancelButton;

QFrame *photoFrame;

QPicture *photoPicture;

QLabel *photoLabel;

};


#endif // CUSTOMDIALOG_H


inputdialog.h

#ifndef INPUTDIALOG_H

#define INPUTDIALOG_H

#include <QDialog>

#include <QLabel>

#include <QLineEdit>

#include <QPushButton>

#include <QInputDialog>

#include <QLabel>

class InputDialog : public QDialog

{

Q_OBJECT

public:

InputDialog(QWidget *parent = 0);

private:

QLabel *NameLabel;

QLabel *SexLabel;

QLabel *AgeLabel;

QLabel *GreadLabel;

QLabel *DNameLabel;

QLabel *DAgeLabel;

QLabel *DSexLabel;

QLabel *DGreadLabel;

QPushButton *NameButton;

QPushButton *SexButton;

QPushButton *AgeButton;

QPushButton *GreadButton;

private slots:

void alterName();

void alterSex();

void alterAge();

void alterGread();

};


#endif // INPUTDIALOG_H


messagedialog.h

#ifndef MESSAGEDIALOG_H

#define MESSAGEDIALOG_H

#include <QDialog>

#include <QLabel>

#include <QLineEdit>

#include <QPushButton>

#include <QInputDialog>

#include <QLabel>


class MessageDialog : public QDialog

{

Q_OBJECT

public:

MessageDialog(QWidget *parent = 0);

private:

QLabel *SelMsgBox;

QPushButton  *QuestionMsg;

QPushButton  *WarningMsg;

QPushButton  *AboutMsg;

QPushButton  *InformationMsg;

QPushButton  *CriticalMsg;

QPushButton  *AboutQtMsg;

private slots:

void showQuestionMsg();

void showWarningMsg();

void showAboutMsg();

void showInformationMsg();

void showCriticalMsg();

void showAboutQtMsg();

};


#endif // MESSAGEDIALOG_H


customdialog.cpp

#include "customdialog.h"

#include <QDialog>

#include <QHBoxLayout>

#include <QGridLayout>

#include <QMessageBox>

CustomDialog::CustomDialog(QWidget *parent)

:QDialog(parent)

{

label = new QLabel("this Custom MsgBox!");

YesButton = new QPushButton("YES");

NoButton = new QPushButton("NO");

CancelButton = new QPushButton("CANCEL");

photoLabel = new QLabel;

this->setWindowTitle("CustomMsgBox");

photoLabel->setPixmap(QPixmap("qt.jpg"));

QHBoxLayout *bottonLayout = new QHBoxLayout;

bottonLayout->addWidget(YesButton, 0);

bottonLayout->addWidget(NoButton, 1);

bottonLayout->addWidget(CancelButton, 2);

QGridLayout *MainLayout = new QGridLayout(this);

MainLayout->addWidget(photoLabel, 0, 0);

MainLayout->addWidget(label, 0, 1);

MainLayout->addLayout(bottonLayout, 1, 0, 1, 1);

}


dialog.cpp

#include "dialog.h"

#include <QGridLayout>

#include <QFont>

Dialog::Dialog(QWidget *parent)

: QDialog(parent)

{

FileDialog = new QFileDialog(this, "open file dialog", "/", "yangsen(*.*)");//最后如果有多个则使用::比如:C++ Files(*.c++)::C Files(*.c)::HeadFiles(*.h)

ColorDialog = new QColorDialog;

FontDialog = new QFontDialog;

// InputDialog = new QInputDialog;

MessageBox = new QMessageBox;

ColorFrame = new QFrame;

ColorFrame->setFrameShape(QFrame::Box);//设置边框

ColorFrame->setAutoFillBackground(true);//设置颜色自动更新


//字体

FontEditDialog = new QLineEdit("Welcome");



FilePushButton = new QPushButton(QStringLiteral("文件标准对话框实例"));

ColorPushButton = new QPushButton(QStringLiteral("颜色标准对话框实例"));

FontPushButton = new QPushButton(QStringLiteral("字体标准对话框实例"));

InputButton = new QPushButton(QStringLiteral("标准输入对话框实例"));

MegButton = new QPushButton(QStringLiteral("标准消息对话框实例"));

CustomButton = new QPushButton(QStringLiteral("自定义消息对话框"));

FileLineEdit = new QLineEdit;

MInputDialog = new InputDialog();

MyMessageDialog = new MessageDialog();

QGridLayout *MainLayout = new QGridLayout(this);

MainLayout->addWidget(FilePushButton, 0, 0);

MainLayout->addWidget(ColorPushButton,1, 0);

MainLayout->addWidget(FontPushButton, 2, 0);

MainLayout->addWidget(InputButton, 3, 0);

MainLayout->addWidget(MegButton, 3, 1);

MainLayout->addWidget(CustomButton, 4, 0);

MainLayout->addWidget(FileLineEdit, 0, 1);

MainLayout->addWidget(ColorFrame, 1, 1);

MainLayout->addWidget(FontEditDialog, 2, 1);

// MainLayout->addWidget(

connect(FilePushButton, SIGNAL(clicked()), this, SLOT(showFileDialog()));

connect(ColorPushButton, SIGNAL(clicked()), this, SLOT(showColorDialog()));

connect(FontPushButton, SIGNAL(clicked()), this, SLOT(showFontDialog()));

connect(InputButton, SIGNAL(clicked()), this, SLOT(showInputDialog()));

connect(MegButton, SIGNAL(clicked()), this, SLOT(showMsgDialog()));

connect(CustomButton, SIGNAL(clicked()), this, SLOT(showCustomDialog()));

}

void Dialog::showFileDialog()

{

this->FileLineEdit->setText(FileDialog->getOpenFileName());

}

void Dialog::showColorDialog()

{

QColor color = this->ColorDialog->getColor();

if(color.isValid())

{

this->ColorFrame->setPalette(QPalette(color));

}

}

void Dialog::showFontDialog()

{

bool ok;

QFont font = this->FontDialog->getFont(&ok);

if(ok)

{

this->FontEditDialog->setFont(font);

}

}

void Dialog::showInputDialog()

{

// QString str = this->InputDialog->getText(this, "InputDialog", "Input:");

// QMessageBox::question(this, "Mesage box", str, QMessageBox::NoButton);

this->MInputDialog->show();

}

void Dialog::showMsgDialog()

{

this->MyMessageDialog->show();

}

void Dialog::showCustomDialog()

{

CustomDialog *customDialog = new CustomDialog;

customDialog->show();

}

Dialog::~Dialog()

{


}


inputdialog.cpp

#include "inputdialog.h"

#include <QGridLayout>

#include <QInputDialog>

#include <QDebug>

InputDialog::InputDialog(QWidget *parent)

: QDialog(parent)

{

NameLabel = new QLabel(QStringLiteral("姓名"));

SexLabel = new QLabel(QStringLiteral("性别"));

AgeLabel = new QLabel(QStringLiteral("年龄"));

GreadLabel = new QLabel(QStringLiteral("成绩"));

DNameLabel = new QLabel;

DAgeLabel = new QLabel;

DSexLabel = new QLabel;

DGreadLabel = new QLabel;

DNameLabel->setFrameStyle(QFrame::Sunken|QFrame::Panel);

DAgeLabel->setFrameStyle(QFrame::Sunken|QFrame::Panel);

DSexLabel->setFrameStyle(QFrame::Sunken|QFrame::Panel);

DGreadLabel->setFrameStyle(QFrame::Sunken|QFrame::Panel);

NameButton  = new QPushButton(QStringLiteral("修改姓名"));

SexButton  = new QPushButton(QStringLiteral("修改性别"));

AgeButton  = new QPushButton(QStringLiteral("修改年龄"));

GreadButton  = new QPushButton(QStringLiteral("修改成绩"));

QGridLayout *MainLayout = new QGridLayout(this);


MainLayout->addWidget(NameLabel, 0, 0);

MainLayout->addWidget(SexLabel, 1, 0);

MainLayout->addWidget(AgeLabel, 2, 0);

MainLayout->addWidget(GreadLabel, 3, 0);


MainLayout->addWidget(DNameLabel, 0, 1);

MainLayout->addWidget(DSexLabel, 1, 1);

MainLayout->addWidget(DAgeLabel, 2, 1);

MainLayout->addWidget(DGreadLabel, 3, 1);


MainLayout->addWidget(NameButton, 0, 2);

MainLayout->addWidget(SexButton, 1, 2);

MainLayout->addWidget(AgeButton, 2, 2);

MainLayout->addWidget(GreadButton, 3, 2);


connect(NameButton, SIGNAL(clicked()), this, SLOT(alterName()));

connect(SexButton, SIGNAL(clicked()), this, SLOT(alterSex()));

connect(AgeButton, SIGNAL(clicked()), this, SLOT(alterAge()));

connect(GreadButton, SIGNAL(clicked()), this, SLOT(alterGread()));

}

void InputDialog::alterName()

{

this->DNameLabel->setText(QInputDialog::getText(NULL, "InputTextDialog", "Name:"));

}

void InputDialog::alterSex()

{

QStringList SexList;

SexList << "man" << "woman";

this->DSexLabel->setText(QInputDialog::getItem(NULL, "ComboxDialog", "SEX:", SexList, 0, false));

}

void InputDialog::alterAge()

{

int age = QInputDialog::getInt(NULL, "IntDialog", "Age:", 0, 0, 200);

QString strAge;

// strAge = QString("%1").arg(age);

//strAge

strAge.sprintf("%d\0", age);

this->DAgeLabel->setText(strAge);

}

void InputDialog::alterGread()

{

float gread = QInputDialog::getDouble(NULL, "FloatDialog", "Gread:", 0);

QString strGread;

strGread.sprintf("%f\0", gread);

this->DGreadLabel->setText(strGread);

}


messagedialog.cpp

#include "messagedialog.h"

#include <QDialog>

#include <QMessageBox>

#include <QGridLayout>

MessageDialog::MessageDialog(QWidget *parent)

:QDialog(parent)

{

SelMsgBox = new QLabel("list:");

QuestionMsg = new QPushButton("QuestionMsg");

WarningMsg = new QPushButton("WarningMsg");

AboutMsg = new QPushButton("AboutMsg");

InformationMsg = new QPushButton("InformationMsg");

CriticalMsg = new QPushButton("CriticalMsg");

AboutQtMsg = new QPushButton("AboutQtMsg");

QGridLayout *MainLayout = new QGridLayout(this);

MainLayout->addWidget(SelMsgBox, 0, 0, 0, 1);

MainLayout->addWidget(QuestionMsg, 1, 0);

MainLayout->addWidget(WarningMsg, 1, 1);

MainLayout->addWidget(AboutMsg, 2, 0);

MainLayout->addWidget(InformationMsg, 2, 1);

MainLayout->addWidget(CriticalMsg, 3, 0);

MainLayout->addWidget(AboutQtMsg, 3, 1);

connect(QuestionMsg, SIGNAL(clicked()), this, SLOT(showQuestionMsg()));

connect(WarningMsg, SIGNAL(clicked()), this, SLOT(showWarningMsg()));

connect(AboutMsg, SIGNAL(clicked()), this, SLOT(showAboutMsg()));

connect(InformationMsg, SIGNAL(clicked()), this, SLOT(showInformationMsg()));

connect(CriticalMsg, SIGNAL(clicked()), this, SLOT(showCriticalMsg()));

connect(AboutQtMsg, SIGNAL(clicked()), this, SLOT(showAboutQtMsg()));

}

void MessageDialog::showQuestionMsg()

{

QMessageBox::question(NULL, "QuestionMsgBox", "you are pis?", QMessageBox::Yes, QMessageBox::No);

}

void MessageDialog::showWarningMsg()

{

QMessageBox::warning(NULL, "WarningMsgBox", "there have pig!", QMessageBox::Yes);

}

void MessageDialog::showAboutMsg()

{

QMessageBox::about(NULL, "AboutMsgBox", "i am superman!");

}

void MessageDialog::showInformationMsg()

{

QMessageBox::information(NULL, "InforMationMsgBox", "this InformationMsgBox");

}

void MessageDialog::showCriticalMsg()

{

QMessageBox::critical(NULL, "CriticalMsgBox", "this is Critical msg box!", QMessageBox::Yes, QMessageBox::No);

}

void MessageDialog::showAboutQtMsg()

{

QMessageBox::aboutQt(NULL);

}


遇到问题有

1 汉字编码问题,试了各种方法依旧不能解决最后使用

QStringLiteral("文件标准对话框实例")解决了

2 图片加载问题,用360浏览器下载了一张图片始终不能加载,后面发现是图片问题,图片需要到画图里面进行打开再另存为才行.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  qt 对话框