首页 > 编程知识 正文

Qdialogbuttonbox,qdialog转qwidget

时间:2023-05-04 11:31:06 阅读:24264 作者:1044

QDialog是Qt所有对话框窗口的基类

如果q小部件没有父组件,则将其嵌入为独立窗口;如果有父组件,则将其嵌入为在父组件中可见的零件。

q诊断程序不能作为子部件嵌入其他容器中

对话框有模态和非模态两种。

模式对话框:

在参数选择对话框中,一般使用模式对话框;

显示后无法与父窗口交互

是被阻止的对话框调用

模式对话框是通过调用exec ) )函数实现的。 使用模式对话框时,事件在对话框中循环,必须关闭该对话框才能继续操作主界面。

非模态:

对于显示或显示特定内容的对话框,通常使用非模态对话框。

显示后的独立存在可同时与父窗口交互

未阻止的对话框调用

show ) )函数来实现

最后一个提示是设置一个属性,指示如果在关闭对话框的同时删除对话框对象,您将释放自己,而不会发生内存泄漏

实例:创建面向对象的窗口,并自己创建类class dialog :公共q诊断程序

# include # include # include # include # include ' dialog.h '

(intmain(intargc,char *argv[] ) ) ) ) ) ) ) ) ) ) )

{

qpplicationa(argc,argv );

故障诊断;

dlg.show (; returna.exec (;

}

. h

# ifndef dialog _ h # define dialog _ h #包含#包含

class Dialog : publicQDialog

{

q _ object保护:

qpushbutton模型BTN;

QPushButton NormalBtn;

qpushbutton混合BTN; 保护性slots : voidmodalbtn _ clicked (; voidNormalBtn_Clicked (; voidMixedBtn_Clicked (; 公共:

诊断(q构件* parent=0); ~诊断程序(;

(; #endif //DIALOG_H

cpp

# include ' dialog.h ' # include dialog :3360诊断程序(q构件* parent ) :

qdialog(parent )、modal BTN (this )、normal BTN (this )、混合BTN (this ) )。

{

模型BTN.settext (模型诊断);

modal BTN.move (20,20 );

模型BTN.resize (100,30 );

正常BTN.settext (正常诊断);

正常BTN.move (20,70 );

正常BTN.resize (100,30 );

混合BTN.settext (混合诊断);

混合BTN.move (20,120 );

混合BTN.resize (100,30 );

连接(modal BTN、signal(clicked )、this、slot (modal BTN _ clicked ) );

连接(normal BTN、signal(clicked )、this、slot (normal BTN _ clicked ) );

连接(混合BTN,信号(clicked ),this,slot )混合BTN _ clicked ) );

resize (140,170;

} void诊断:3360 modal BTN _ clicked (

{

qDebug () ModalBtn_Clicked ) ) Begin );

QQ (This;

dialog.exec (; //done (已接受);

q调试((modal BTN _ clicked ) )结束);

} void诊断:3360 normal BTN _ clicked (

{

q调试(normal BTN _ clicked ) ) Begin );

q诊断程序*诊断程序=newq诊断程序(this ); 如果定义为//

栈 QDialog dialog ; dialog->show();会一闪而过 也就是说对话框显示至桌面时,依然会继续往下运行,运行到函数的末尾(这个是消息映射函数)局部变量就被销毁了,所以对话框就消失了 如果是在堆上,销毁的只是指向这个堆对象的指针,堆对象不会被销毁,对话框就不糊消失了

dialog->setAttribute(Qt::WA_DeleteOnClose);//设置该属性即可在让在该窗口关闭时就可以释放堆上的内存了不会造成泄漏

dialog->show();//done(Rejected);

qDebug() << "NormalBtn_Clicked() End";

}void Dialog::MixedBtn_Clicked()//混合的对话框

{

qDebug()<< "MixedBtn_Clicked() Begin";

QDialog* dialog = new QDialog(this);//指定父组件this

dialog->setAttribute(Qt::WA_DeleteOnClose);

dialog->setModal(true);//设置非模态对话框的行为类似模态对话框 为混合对话框

dialog->show();//done(100);

qDebug() << "MixedBtn_Clicked() End";

}

Dialog::~Dialog()

{

qDebug()<< "~Dialog()";

}

对话框的返回值:

只有模态对话框才具有返回值(因为模态对话框用于选择的)

模态对话框返回值用于表示交互结果

实际应用中就是根据用户的操作exec得到不同的结果值,根据这些值判断做出相应的操作(进入不同的处理函数)

当删除一个dialog对象时,exec()返回QDialog::Rejected,因此在删除dialog时要特别小心。

#include #include#include#include#include"Dialog.h"

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

Dialog dlg;int r = dlg.exec();//将Dialog 设置为模态对话框,程序运行到这一行就会阻塞了

if( r ==QDialog::Accepted )

{

qDebug()<< "Accepted";

}else if( r ==QDialog::Rejected )

{

qDebug()<< "Rejected";

}else{

qDebug()<

}return r;//如果将一个对话框一模态对话框的模式运行返回值需要时r;;

//如果直接返回a.exec()就进入了两次消息循环,其实就是进入消息循环 当关闭窗口的时候应用程序不会结束了 所以返回值需要时r;

}

.c

#include "Dialog.h"#includeDialog::Dialog(QWidget*parent) :

QDialog(parent), ModalBtn(this), NormalBtn(this), MixedBtn(this)

{

ModalBtn.setText("Modal Dialog");

ModalBtn.move(20, 20);

ModalBtn.resize(100, 30);

NormalBtn.setText("Normal Dialog");

NormalBtn.move(20, 70);

NormalBtn.resize(100, 30);

MixedBtn.setText("Mixed Dialog");

MixedBtn.move(20, 120);

MixedBtn.resize(100, 30);

connect(&ModalBtn, SIGNAL(clicked()), this, SLOT(ModalBtn_Clicked()));

connect(&NormalBtn, SIGNAL(clicked()), this, SLOT(NormalBtn_Clicked()));

connect(&MixedBtn, SIGNAL(clicked()), this, SLOT(MixedBtn_Clicked()));

resize(140, 170);

}voidDialog::ModalBtn_Clicked()

{

qDebug()<< "ModalBtn_Clicked() Begin";

done(Accepted);

qDebug()<< "ModalBtn_Clicked() End";

}voidDialog::NormalBtn_Clicked()

{

qDebug()<< "NormalBtn_Clicked() Begin";

done(Rejected);

qDebug()<< "NormalBtn_Clicked() End";

}voidDialog::MixedBtn_Clicked()

{

qDebug()<< "MixedBtn_Clicked() Begin";

done(100);

qDebug()<< "MixedBtn_Clicked() End";

}

Dialog::~Dialog()

{

qDebug()<< "~Dialog()";

}

其中void QDialog::​done(int r)函数一直不理解 也没有找到说清楚的博客

最可靠的还是到帮助文档:

void QDialog::​done(int r)//设置返回值关闭对话框

Closes the dialog and sets its result code to r. If this dialog is shown with exec(), done() causes the local event loop to finish, and exec() to return r.

隐藏模式对话框并且设置结果代码为r

狄泰学院第17课 - 对话框及其类型笔记

http://blog.csdn.net/xgy_123/article/details/22219639

http://www.kuqin.com/qtdocument/qdialog.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。