一、标准对话框
#include "widget.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
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 <QWidget>
#include<QColorDialog>
#include<QErrorMessage>
#include<QFileDialog>
#include<QFontDialog>
#include<QInputDialog>
#include<QMessageBox>
#include<QProgressDialog>
#include<QPushButton>
#include <QTextEdit>
#include <QDebug>
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()<<filename;
te->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就一直在屏幕上的那种东西。
效果像下面这样
我们点击getfile就会弹出这个文件夹选择一个文件
点击一个文件
点击OK就会把信息显示在对话框里
我们随便选择一段话setcolor
点击setfont可以设置大小字体什么的
点击getstr写进一个字符串就会显示在文本框中
msg
errmsg
progress
二、自定义对话框
#include "widget.h"
#include <QWidget>
#include <QDialog>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
QWidget a;
a.show();
}
Widget::~Widget()
{
}
用widget的话一闪而过;
在dialog中有一个特殊方法
会先弹出一个框框叉掉以后再弹出第二个框框
我们想要自定义一个对话框叫mydialog右键我们的工程文件夹
他会为我们生成一个简单的框架我们简单完善一下就可以使用了。
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 <QDialog>
#include <QLineEdit>
#include <QPushButton>
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 <QVBoxLayout>
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 <QWidget>
#include <QDialog>
#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()
{
}
这样就实现了一个简单的登录界面
现在什么都实现不了,就只是点OK出现后面的框框
加点东西简单实现的账号密码登录
源码再我的资源里欢迎下载