草庐IT

Qt之对话框(QDialog)

人才程序员 2023-09-29 原文

文章目录


提示:以下是本篇文章正文内容,下面案例可供参考

一、对话框的概念

对话框是和用户简短交互的一种窗口。如:登录界面,关于界面,选择文件界面…
他不能放在在其他的Qt组件里面。

二、与QWidget的区别

我们可以在main.cpp中写下面的代码:

实验1:

#include <QApplication>
#include <QDialog>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QWidget w;
    QDialog d(&w);

    w.setWindowTitle("QWidget");//设置该窗口标题
    d.setWindowTitle("QDialog");

    w.show();
    d.show();

    return a.exec();
}

我们可以看到,QDialog指定了父类,可还是出现了2个窗口,可以按正常逻辑,应该是出现一个窗口QWidget啊,可现在却出现了QDialog。

实验2:

#include <QApplication>
#include <QDialog>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QDialog d;
    QWidget w(&d);

    w.setWindowTitle("QWidget");
    d.setWindowTitle("QDialog");

    w.show();
    d.show();

    return a.exec();
}

这次我们让QWidget放到QDialog里面,就会发现,只有QDialog。那么QWidget就被放在QDialog里面了,因为他和我们QDialog的颜色一样,所以看不到

三、对话框2种显示方法

1、使用exec()函数显示:模态对话框
特点:显示后无法与父窗口交互。是一种阻塞试的调用。
阻塞试是什么意思:必须要点关闭按钮/使用里面的一个函数,等下我们会讲。
使用场景:必须要用户选择

2、使用show()函数显示:非模态对话框
特点:显示后独立存在可以在同时与父组件交互。是一种非阻塞式的对话框方式
使用场景:和模态对话框相对的

小技巧:
模态对话框一般在栈上创建。
非模态对话框一般在堆上创建。
非模态对话框需要指定Qt::WA_DeleteOnClose。原因:因为无法得知他的关闭时间,他又是在堆上创建的,所以当我们指定了这个东西的时候,关闭时,他自动delete该窗口。

四、对话框返回值的概念

只有模态对话框才有返回值。
使用dene(int i)返回

一般使用下面两个作为参数:
QDialog::Accepted用户操作成功
QDialog::Rejectd用户操作失败

本节示例

使用Qt设计师类创建一个QDialog。
UI界面如下:

点击登录打印用户名和密码,点击取消退出.

提示:取消可使用槽函数close()

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"
#include <QDebug>

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);

    connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(Login()));
}

void Dialog::Login()
{
    qDebug() << ui->lineEdit->text();
    qDebug() << ui->lineEdit_2->text();
}

Dialog::~Dialog()
{
    delete ui;
}

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();

private:
    Ui::Dialog *ui;

private slots:
    void Login();
};

#endif // DIALOG_H

有关Qt之对话框(QDialog)的更多相关文章

  1. Qt Designer的简单使用 - 2

    在前面两节的例子中,主界面窗口的尺寸和标签控件显示的矩形区域等,都是用C++代码编写的。窗口和控件的尺寸都是预估的,控件如果多起来,那就不好估计每个控件合适的位置和大小了。用C++代码编写图形界面的问题就是不直观,因此Qt项目开发了专门的可视化图形界面编辑器——QtDesigner(Qt设计师)。通过QtDesigner就可以很方便地创建图形界面文件*.ui,然后将ui文件应用到源代码里面,做到“所见即所得”,大大方便了图形界面的设计。本节就演示一下QtDesigner的简单使用,学习拖拽控件和设置控件属性,并将ui文件应用到Qt程序代码里。使用QtDesigner设计界面在开始菜单中找到「Q

  2. 关于Qt程序打包后运行库依赖的常见问题分析及解决方法 - 2

    目录一.大致如下常见问题:(1)找不到程序所依赖的Qt库version`Qt_5'notfound(requiredby(2)CouldnotLoadtheQtplatformplugin"xcb"in""eventhoughitwasfound(3)打包到在不同的linux系统下,或者打包到高版本的相同系统下,运行程序时,直接提示段错误即segmentationfault,或者Illegalinstruction(coredumped)非法指令(4)ldd应用程序或者库,查看运行所依赖的库时,直接报段错误二.问题逐个分析,得出解决方法:(1)找不到程序所依赖的Qt库version`Qt_5'

  3. Qt样式表之 QSS 语法介绍;QLineEdit、 - 2

     内容来自Qt样式表之QSS语法介绍-3YL的博客Qt样式表是一个可以自定义部件外观的十分强大的机制,可以用来美化部件。Qt样式表的概念、术语和语法都受到了HTML的层叠样式表(CascadingStyleSheets, CSS教程)的启发,不过与CSS不同的是,Qt样式表应用于部件的世界。类型选择器QPushButton匹配QPushButton及其子类的实例ID选择器QPushButton#okButton匹配所有objectName为okButton的QPushButton实例。 CSS常用样式1CSS文字属性注:px:相对长度单位,像素(Pixel)。pt:绝对长度单位,点(Point

  4. QT 设计一个串口调试工具,用一个工程就能轻松解决,外加虚拟串口工具模拟调试,在日常工作中可类比模块间通信,非常详细建议收藏 - 2

    QT串口调试工具第一节虚拟串口工具安装第二节QT创建一个基于QWidget的项目第三节UI界面设计第三节项目头文件widget.h第四节项目实现文件widget.cpp第五节main函数第六节编译结果重点第七节使用QT打包程序,不安装QT的电脑可使用第一节虚拟串口工具安装-----------------------------------------下载所需工具---------------------------------------------------------------------链接:https://pan.baidu.com/s/1QkT36S4EnH2HEAhZ1TZ8

  5. Android对话框的详细介绍(提示对话框,自定义对话框) - 2

    简介:我们都知道在Android开发中,当我们的程序在与用户交互时,用户会得到一定的反馈,其中以对话框的形式的反馈还是比较常见的,接下来我们来介绍几种常见的对话框的基本使用。前置准备:(文章最后附有所有代码)我们首先先写一个简单的页面用于测试这几种Dialog(对话框)代码如下,比较简单,就不做解释了一、提示对话框(即最普通的对话框)首先我们给普通对话框的按钮设置一个点击事件,然后通过AlertDialog.Builder来构造一个对象,为什么不直接Dialog一个对象,是因为Dialog是一个基类,我们尽量要使用它的子类来进行实例化对象,在实例化对象的时候,需要将当前的上下文传过去,因为我这

  6. 嵌入式学习之QT学习----3 制作简单的QT界面(如:QQ登录界面) - 2

    1、创建一个QT工程newproject—>Application—>QtWidgetsApplication—>choose…(注意不要有中文路径)填写名称(我写的名称为class2)和创建路径(D:\qt\qt_demo\class2)—>填写类名,这里基类要选择“QWidget”,这样一个QT工程就创建好啦。qt的移植性非常强,一套代码我们不用修改太多,直接通用所有的平台。说明:QMainWindow:主窗口类,主窗口具有主菜单栏、工具栏和状态栏,类似于一般的应用程序的主窗口。QWidget:它是所有具有可视界面的基类,选择QWidget创建的界面对各种界面组件都可以支持。QDialog

  7. ruby-on-rails - ActiveRecord 与两个数据库对话? - 2

    我们最近改进了一个项目,希望将我们所有的旧数据带入新系统。问题在于架构略有不同,因此无法直接导入SQL。由于一些非规范化和数据库更改,我们需要在数据准备好导入之前对数据进行一些处理。我希望是这样的:OldUser.all.eachdo|ou|NewUser.create({:first_name=>ou.first_name:last_name=>ou.last_name:login=>ou.login:company_name=>ou.company.name})end在上面的示例中,OldUser正在从旧数据库读取数据,而NewUser正在处理新数据库。我需要两组模型(新的和旧的)

  8. ruby - QtRuby 可以与 Qt 5 一起使用吗? - 2

    我可以在网上找到关于QtRuby的所有信息使用Qt4,但Qt的当前版本是5。这仅仅是文档跟不上现实的问题,而Qt5可以与QtRuby一起正常工作吗?如果您断言情况确实如此(Qt5不受支持),那么请用证据支持您的断言。 最佳答案 QtRubyQtruby和korundum已经多年没有维护了。要获得qtruby的维护版本,请将qtbindings安装为ruby​​gem。Qtbindings主页:https://github.com/ryanmelt/qtbindings/另见https://github.com/ryanmelt/qt

  9. ruby - 如何让 Qt4 在 Windows 7 上运行 ruby​​ 1.9.2? - 2

    总结我正在编写一个使用Qt4作为其GUI的Ruby1.9.2应用程序,我想在Linux、OSX和Windows上分发它。我的应用程序在除Windows764位机器外的所有设备上运行良好。有Win7+Qt4+1.8.7的工作示例,但显然不是Win7+Qt4+1.9.2。Ruby-Qt绑定(bind)有两个gem,qtbindings和qtruby4(有时称为qt4-qtruby),但我还没有看到它们都在Win7上运行Ruby1.9.2。qtruby4的问题ThisarticlefromOctober2008及其updatedversionfromJune2011作为一个很好的起点,但我与

  10. ruby - 使用 Sinatra 时与数据库对话的最佳方式是什么? - 2

    据我了解,与Rails不同,Sinatra框架不提供ORM。在那种情况下,您如何与Sinatra应用程序中的数据库对话?还是Sinatra仅适用于不使用数据库的应用程序? 最佳答案 如果您使用的是Sinatra,我不推荐DataMapper足够高。我有几个Rails应用程序,其中我坚持使用ActiveRecord,并且我一直在诅咒它的缺点和设计缺陷。如果您使用Sinatra,DataMapper是一个非常实用的选择。require"rubygems"require"sinatra"require"datamapper"DataMap

随机推荐