QT/C++——对话框
创始人
2024-05-20 09:42:05
0

一、标准对话框

#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_OBJECTpublic: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就一直在屏幕上的那种东西。

效果像下面这样

 

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

 点击一个文件

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

 

我们随便选择一段话setcolor

 

 

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

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

 

 msg

 errmsg

 progress

 

二、自定义对话框

#include "widget.h"
#include 
#include 
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 
#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 0myQDialog a;a.setFixedSize(100, 100);a.exec();if(!a.stat)exit(0);#endifint s = myQDialog::getstat();if(!s)exit(0);
}Widget::~Widget()
{}

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

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

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

 

 

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

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...