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

来源:互联网 发布:程序员怀疑手游被抄袭 编辑:程序博客网 时间:2024/05/22 06:12

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_OBJECTpublic:    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浏览器下载了一张图片始终不能加载,后面发现是图片问题,图片需要到画图里面进行打开再另存为才行.

原创粉丝点击