QT/C++——对话框

一、标准对话框

#include "widget.h"
#include 
#include 

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    btcolor = new QPushButton("setcolor");
    bterrm = new QPushButton("errmsg");
    btfile = new QPushButton("getfile");
    btfont = new QPushButton("setfont");
    btinput = new QPushButton("getstr");
    btmsg = new QPushButton("msg");
    btprg = new QPushButton("progress");

    te = new QTextEdit;

    QVBoxLayout *vbox = new QVBoxLayout;
    vbox->addWidget(btcolor);
    vbox->addWidget(bterrm);
    vbox->addWidget(btfile);
    vbox->addWidget(btfont);
    vbox->addWidget(btinput);
    vbox->addWidget(btmsg);
    vbox->addWidget(btprg);

    QHBoxLayout *mainbox = new QHBoxLayout;
    mainbox->addLayout(vbox);
    mainbox->addWidget(te);
    this->setLayout(mainbox);

    connect(btcolor, SIGNAL(clicked(bool)), this, SLOT(setcolorf()));
    connect(bterrm, SIGNAL(clicked(bool)), this, SLOT(showerr()));
    connect(btfile, SIGNAL(clicked(bool)), this, SLOT(getfile()));
    connect(btfont, SIGNAL(clicked(bool)), this, SLOT(setfont()));
    connect(btinput, SIGNAL(clicked(bool)), this, SLOT(getstr()));
    connect(btmsg, SIGNAL(clicked(bool)), this, SLOT(showmsg()));
    connect(btprg, SIGNAL(clicked(bool)), this, SLOT(showprogress()));


}

Widget::~Widget()
{

}
#ifndef WIDGET_H
#define WIDGET_H

#include 
#include
#include
#include
#include
#include
#include
#include

#include
#include 
#include 

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();

public slots:
    void setcolorf()
    {
        QColor c =  QColorDialog::getColor();
        te->setTextColor(c);
    }
    void showerr()
    {
        QErrorMessage *msg = QErrorMessage::qtHandler();
        msg->showMessage("EEEEEEEE");
    }

    void getfile()
    {
        QString filename = QFileDialog::getOpenFileName();

        qDebug()<setText(filename);
    }

    void setfont()
    {
        bool ok;
        QFont myfont = QFontDialog::getFont(&ok);
        if(ok)
             te->setFont(myfont);
    }

    void getstr()
    {
         QString str =  QInputDialog::getText(this, "xxxx","yyyyy");
         te->setText(str);

    }

    void showmsg()
    {
        QMessageBox::information(this, "vvvv", "hello", "AAA");
    }

    void showprogress()
    {
           QProgressDialog p;
           p.setValue(50);
           p.exec();

    }
private:
    QPushButton *btcolor;
    QPushButton *bterrm;
    QPushButton *btfile;
    QPushButton *btfont;
    QPushButton *btinput;
    QPushButton *btmsg;
    QPushButton *btprg;

    QTextEdit *te;
};

#endif // WIDGET_H

对话框就是Dialog,新建工程建成widget了,他就像那种不点关闭或者OK就一直在屏幕上的那种东西。

效果像下面这样

QT/C++——对话框_第1张图片

 QT/C++——对话框_第2张图片

我们点击getfile就会弹出这个文件夹选择一个文件

 点击一个文件

QT/C++——对话框_第3张图片

点击OK就会把信息显示在对话框里

QT/C++——对话框_第4张图片 

我们随便选择一段话setcolor

 QT/C++——对话框_第5张图片

 QT/C++——对话框_第6张图片

 点击setfont可以设置大小字体什么的

QT/C++——对话框_第7张图片

 点击getstr写进一个字符串就会显示在文本框中

QT/C++——对话框_第8张图片

 QT/C++——对话框_第9张图片

 msg

QT/C++——对话框_第10张图片

 errmsg

QT/C++——对话框_第11张图片

 progress

QT/C++——对话框_第12张图片

 

二、自定义对话框

#include "widget.h"
#include 
#include 
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    QWidget a;
    a.show();
}

Widget::~Widget()
{

}

用widget的话一闪而过; 

QT/C++——对话框_第13张图片

 在dialog中有一个特殊方法

会先弹出一个框框叉掉以后再弹出第二个框框

我们想要自定义一个对话框叫mydialog右键我们的工程文件夹

QT/C++——对话框_第14张图片

QT/C++——对话框_第15张图片 

他会为我们生成一个简单的框架我们简单完善一下就可以使用了。

QT/C++——对话框_第16张图片

 

Q_OBJECT是Qt中的一个宏。由于Qt的语法是在c++的基础上拓展的,所以在Qt程序的编译过程中,直接用gcc这些标准编译器编译是不可行的,因为gcc不能识别这些拓展性的语法,比如信号和槽(Signal and Slot)。于是Qt引入了moc这一编译器。

moc(Meta-Object Compiler),即元对象编译器,Qt 程序在交由标准编译器编译之前,会使用 moc 分析 C++ 源文件,假设它发现某个头文件中包括了 Q_OBJECT这个宏(注意, moc 只处理头文件中标记了Q_OBJECT的类声明,不会处理 cpp 文件中的类似声明),则会生成另外一个 C++ 源文件,这个源文件里包括了 Q_OBJECT 宏的实现代码,并且文件名称将会是原文件名称前面加上 moc_ 。这个新的文件会和原本的c++源文件一起进入编译系统,最终被链接到二进制代码中完成编译工作。

在Qt中,QObject是所有Qt类的基类,是Qt对象模型的核心,只有继承了QObject类的类,才具有信号槽的能力。所以,为了使用信号槽,必须继承QObject。凡是QObject类(不管是直接子类还是间接子类),都应该在第一行代码写上Q_OBJECT。不管是不是使用信号槽,都应该添加这个宏。这个宏的展开将为我们的类提供信号槽机制、国际化机制以及 Qt 提供的不基于 C++ RTTI 的反射能力。因此,如果你觉得你的类不需要使用信号槽,就不添加这个宏,这是错误的,因为其它很多操作都会依赖于这个宏。
————————————————
版权声明:本文为CSDN博主「LIEYz」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_18998145/article/details/117324209

下面实现一个功能,点OK出现后面的框,点XX结束

#ifndef MYDIALOG_H
#define MYDIALOG_H

#include 
#include 
#include 

class myQDialog : public QDialog
{
    Q_OBJECT
public:
    myQDialog();

public slots:
    void ok_pushed()
    {
        stat = true;
        close();
    }

public:
    static int getstat()
    {
        myQDialog a;
        a.exec();

        return a.stat;
     }

private:
    QLineEdit *le;
    QPushButton *pb;

    int stat;
};

#endif // MYDIALOG_H

 

#include "mydialog.h"
#include 

myQDialog::myQDialog()
{
    le = new QLineEdit("aaaaaa");
    pb = new QPushButton("OK");

    QVBoxLayout *vbox = new QVBoxLayout;
    vbox->addWidget(le);
    vbox->addWidget(pb);

    setLayout(vbox);

    stat = false;
    connect(pb, SIGNAL(clicked(bool)), this, SLOT(ok_pushed()));
}
#include "widget.h"
#include 
#include 
#include "mydialog.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
#if 0
    myQDialog a;
    a.setFixedSize(100, 100);
    a.exec();

    if(!a.stat)
        exit(0);

#endif

    int s = myQDialog::getstat();

    if(!s)
          exit(0);
}

Widget::~Widget()
{

}

 这样就实现了一个简单的登录界面

QT/C++——对话框_第17张图片

现在什么都实现不了,就只是点OK出现后面的框框

加点东西简单实现的账号密码登录

QT/C++——对话框_第18张图片

QT/C++——对话框_第19张图片 

 QT/C++——对话框_第20张图片

源码再我的资源里欢迎下载 

你可能感兴趣的:(C++/QT,QT,GUI,嵌入式,C++)