首页 > 其他分享 >QT5.14.2 Qt5组件随心所欲,从界面到实用一把抓

QT5.14.2 Qt5组件随心所欲,从界面到实用一把抓

时间:2024-03-24 10:05:05浏览次数:30  
标签:QT5.14 对话框 一把抓 Qt5 组件 new 我们 QTimer


Qt5作为跨平台的C++图形界面框架,自带了丰富的组件供我们使用。无论是构建精美的UI界面,还是满足各种实用的需求,Qt5总能为我们意趣盎然地施展绝活。今天,就让我们一同探索Qt5中的日历组件、登录窗口、文件对话框、颜色选择对话框、进度条和Timer组件,见识它们的强大之处!


一、日历组件:掌控时光


日程安排和时间管理是现代生活的必修课。幸运的是,Qt5为我们准备了强大的QCalendarWidget组件,让日历的构建和使用变得无比简单:

QCalendarWidget *calendarWidget = new QCalendarWidget(this);
calendarWidget->setMinimumDate(QDate::currentDate().addDays(-365));
calendarWidget->setMaximumDate(QDate::currentDate().addDays(365));
calendarWidget->setGridVisible(true);

connect(calendarWidget, &QCalendarWidget::clicked, [=](const QDate &date){
    QString dateString = date.toString("yyyy-MM-dd");
    QMessageBox::information(this, "Selected Date", dateString);
});

只需几行简单的代码,我们就构建了一个漂亮的日历视图。通过设置最小最大日期范围和网格显示,使其符合实际需求。最后,只要连接clicked信号,就能监听用户选择的日期并做进一步处理。

是不是很酷?QCalendarWidget不仅外观精致,功能也相当强大。它支持日期导航、工具提示、键盘导航等多种操作,甚至能够自定义日期单元格的渲染和选择行为。用它构建个人应用或商业项目再合适不过了。


二、登录窗口:保卫入口


登录窗口是几乎每个应用程序都会拥有的功能,对程序安全至关重要。Qt5通过QDialog和QLineEdit等基础组件,就能帮我们轻松搭建起登录窗口:

QDialog loginDialog(this);
loginDialog.setWindowTitle("Login");

QFormLayout *layout = new QFormLayout(&loginDialog);
QLineEdit *usernameEdit = new QLineEdit();
QLineEdit *passwordEdit = new QLineEdit();
passwordEdit->setEchoMode(QLineEdit::Password);

layout->addRow("Username:", usernameEdit);
layout->addRow("Password:", passwordEdit);

QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
layout->addWidget(buttonBox);

connect(buttonBox, &QDialogButtonBox::accepted, [&loginDialog, usernameEdit, passwordEdit](){
    if(checkCredentials(usernameEdit->text(), passwordEdit->text())){
        loginDialog.accept();
    } else {
        QMessageBox::warning(&loginDialog, "Error", "Invalid username or password");
    }
});

connect(buttonBox, &QDialogButtonBox::rejected, &loginDialog, &QDialog::reject);

loginDialog.exec();

我们首先创建了一个QDialog对话框作为登录窗口,然后在其中添加了用户名和密码的输入框。这里密码输入框通过设置EchoMode实现了密码遮蔽的功能。

接下来,我们添加了"确定"和"取消"两个按钮。当用户点击确定时,我们检查用户名和密码是否正确。如果正确,我们让对话框返回QDialog::Accepted;否则弹出错误提示框。

最终,通过调用QDialog::exec()函数,我们启动了模态的登录对话框。用户必须先通过登录验证,整个应用程序才能继续运行。


三、文件浏览对话框:内置导航


选择打开或保存文件是日常开发中常见的需求。而Qt5的QFileDialog组件则帮助我们轻松搞定这个需求:

QString filePath = QFileDialog::getOpenFileName(this, "Open File", QDir::homePath());
if(!filePath.isEmpty()){
    QFile file(filePath);
    if(file.open(QIODevice::ReadOnly | QIODevice::Text)){
        QTextStream stream(&file);
        ui->textEdit->setPlainText(stream.readAll());
    }
}

这里我们调用QFileDialog的静态getOpenFileName函数,它会打开一个文件浏览对话框让用户选择要打开的文件。对话框默认打开在用户的home目录,并且支持平台风格的界面显示。

当用户确定选择并点击打开后,对话框返回所选文件的路径。我们先判断路径是否为空,如果不为空就打开文件读取内容并显示在界面文本框中。

除了打开文件对话框,QFileDialog还提供了getSaveFileName函数用于选择要保存的文件。无论是获取现有文件还是选择新文件,它都为我们提供了内置的路径浏览、快捷方式和书签管理等强大功能。


四、颜色选择对话框:点亮生活


颜色是美学设计中不可或缺的元素,Qt5也贴心地为我们准备了QColorDialog组件:

QColor initialColor = palette().window().color();
QColor selectedColor = QColorDialog::getColor(initialColor, this, "Select Color");

if(selectedColor.isValid()){
    QPalette newPalette = palette();
    newPalette.setColor(QPalette::Window, selectedColor);
    setPalette(newPalette);
}

QColorDialog::getColor函数会打开一个模态的颜色选择对话框。我们可以传入一个初始颜色,对话框将以此为起点展示调色板。用户选择合适的颜色后点击确定,getColor就会返回所选的颜色值。

这个例子中,我们首先获取了窗口当前的背景颜色作为初始颜色。然后打开颜色选择对话框让用户选择一个新颜色。如果用户选择的颜色有效,我们就更新窗口的Palette使其生效。

QColorDialog功能非常强大,它提供了多种调色方式:包括基本颜色选择、HSV/HSL选择、RGB旋钮和颜色渐变预览等。我们甚至可以在对话框中添加我们自定义的颜色,为用户提供无缝整合的颜色选择体验。


五、进度条与计时器:过程可见


有时我们需要在程序中模拟一个长时间运行的任务,并显示其进度。Qt5通过QProgressBar和QTimer就能轻松实现这一需求:

QProgressBar *progressBar = new QProgressBar;
QTimer *timer = new QTimer(this); 
connect(timer, &QTimer::timeout, [=](){
    int value = progressBar->value() + 1;
    progressBar->setValue(value);
    
    if(value == progressBar->maximum()){
        timer->stop();
        QMessageBox::information(this, "Finished", "Task completed!");
    }
});

progressBar->setRange(0, 100);
timer->start(100); // 每100毫秒更新一次

我们首先创建了一个QProgressBar和QTimer对象。QProgressBar是Qt5中用于显示任务进度的组件,而QTimer则提供了定时器功能,可以在指定时间间隔触发timeout信号。

通过连接QTimer的timeout信号到一个lambda表达式,我们每次都会更新QProgressBar的当前值。一旦进度达到最大值,我们停止定时器并弹出一个消息框提示任务完成。

最后,我们设置QProgressBar的范围为0到100,并启动QTimer每100毫秒触发一次超时。运行这个程序,你将看到进度条在界面上缓缓推进,最终完成。

除了模拟长时间任务,QProgressBar和QTimer还可以用于各种需要展示进度或定时执行的场景,比如文件下载、动画等等。二者相互配合,可以产生丰富的用户体验效果。


六、实时更新时间:Timer让时间飞逝


时间对于大多数应用程序来说,都是一个非常重要的数据。幸运的是,在Qt5中,通过QTimer和QDateTime,我们可以轻松实现实时更新时间的功能:

QLabel *timeLabel = new QLabel;
QTimer *timer = new QTimer(this);
connect(timer, &QTimer::timeout, [=](){
    QDateTime currentTime = QDateTime::currentDateTime();
    timeLabel->setText(currentTime.toString("yyyy-MM-dd hh:mm:ss"));
});

timer->start(1000); // 每1秒更新一次

同样,我们先创建了一个QLabel和QTimer对象。在QTimer的timeout信号的连接函数中,我们获取当前时间,并将其格式化为字符串显示在QLabel上。

最后,我们让QTimer每1000毫秒(1秒)触发一次超时信号。这样一来,timeLabel上显示的时间就会每秒自动更新了。

QDateTime是Qt5提供的日期时间处理类,它不仅支持日期和时间的获取,还支持时区处理、运算和格式化等多种操作。配合QTimer这个计时器,我们就能创建出各种与时间相关的实用功能。


他山之石,待你攻克


看来Qt5貌不惊人的这些基础组件,也相当强大和实用啊!通过这些例子,相信你已经初步体会到了Qt5组件在构建UI界面和实现实用功能方面的强大能力。

不过,这还仅仅是Qt组件世界的冰山一角。在实际开发中,Qt5为我们提供了无数种实用的组件,等着你去一一施展。比如用于网络编程的QNetworkAccessManager,用于多线程的QThread,用于图形绘制的QPainter等等,它们将成为你武装自己,攻无不克的利器。

所以,赶紧动手去探索和实践吧!如果你对本文介绍的任何组件有进一步的疑问,或者有其他Qt5组件的需求,也尽管在评论区留言,我将全力以赴为你讲解和分析。Qt5的神奇世界充满了无限可能,让我们一起遨游在代码的海洋,书写属于自己的编程传奇!

标签:QT5.14,对话框,一把抓,Qt5,组件,new,我们,QTimer
From: https://blog.csdn.net/lizhong2008/article/details/136981410

相关文章

  • 使用 Pyqt5 GUI 页面请求 FastAPI 后端 API,实现逻辑功能
    使用PyQt5+FastAPI+SQLAlchemy+Redis+Celery做一个登录注册页(四)本文将介绍用PyQt5+FastAPI+SQLAlchemy+Redis+Celery做的一个登录注册页,使用邮箱接收验证码,本文介绍是前后端分离的实现方式,厚后端使用FastAPI+SQLAlchemy+Redis+Celery,你可以将PyQt5改为PySide2以获得更宽松......
  • 【Qt5】QVariant
    2024年3月22日,周五下午什么是QVariantQVariant是Qt框架中用于处理各种数据类型的通用类。它可以存储几乎任何类型的数据,并且能够在不同的Qt类之间进行类型转换。QVariant在Qt中被广泛用于处理不同的数据类型,包括基本数据类型(如整数、浮点数、布尔值等)、字符串、自定......
  • Centos7交叉编译QT5.11.1+AArch64架构
    一、准备工作1、更新系统软件,目的是使用新版本的gcc等,还要保证磁盘空间足够1yumupdate2yuminstallgccgcc-c++3yuminstallmesa-libGL-develmesa-libGLU-develfreeglut-devel2、到linaro下载编译链工具安装aarch64(arm64)编译链工具。国产CPU,如飞腾、华为麒麟等......
  • 飞凌RK3568开发板移植Qt5.9.8
    1、安装Ubuntu18.04虚拟机,并开启root登录2、gcc环境搭建从官方提供的网盘资料OK3568-C_ForlinxDesktop20.04_用户资料_R3(更新日期:20231201),解码\Linux\源码\OK3568-linux-source,在prebuilts文件夹将gcc拷贝到虚拟机(Ubuntu18.04)的/usr/local目录下 设置环境变量,修改/etc/pr......
  • PyQt5 GUI编程
    一.PyQt5简介PyQt5是一个用于创建图形用户界面(GUI)应用程序的跨平台工具集,它将Qt库(广泛用于C++编程语言中创建丰富的GUI应用程序)的功能包装给Python使用者。PyQt5是由RiverbankComputing开发的,并且可以在所有主流操作系统上运行,包含Windows、macOS和Linux。PyQt5包括了超过620个......
  • QT5.14.2 探秘Qt信号槽奥秘--让对象间通信如虎添翼
    一、前言在当今这个万物互联的时代,对象间通信无疑是编程领域中最为基础也最为重要的问题。作为知名的跨平台开发框架,Qt自然也需要解决这一问题。于是,Qt巧妙地提出了信号与槽(Signals&Slots)这一机制,以观察者模式的思路让对象间通信变得行云流水。那么,Qt信号与槽的本质......
  • Qt5.12配置OpenCV教程
    在开发图像处理和计算机视觉应用时,QT和OpenCV是两个不可或缺的工具。QT为我们提供了丰富的图形界面设计功能,而OpenCV则提供了强大的图像处理算法。那么,如何将这两者完美结合呢?本文将为你详细解析QT5.12与OpenCV的配置过程,让你轻松上手!一、软件下载1、QT 5.12.9下载地址:......
  • 错误:在 /tmp/easy_install-rad8_t5b/PyQt5-5.14.0.tar.gz #15 中找不到安装脚本
    thePyQt55.14.0isbrokenbecausecan'tnotinstallonresppi3.youcantoinstallaversionofPyQt5thatworkingfineonresp.followthesteps:PyQt55.14.0已损坏,因为无法无法安装在resppi3上。您可以安装一个在resp上运行良好的PyQt5版本,请按照以下......
  • pyqt5中多线程爬虫
       设立爬虫Class,继承pyqt5中的Thread函数中使用普通线程  整体代码:importsysimportpandasaspdimportjson,requests,time,threadingfromPyQt5.QtWidgetsimportQMainWindow,QApplication,QVBoxLayout,QMessageBoxfromui.ui_testimportUi_MainWind......
  • 恢复VCPkg(2023-01-27)中Vtk[Qt]的默认依赖为Qt5
    通过查看vtk的更新的日志已于2023-01-27将默认依赖的Qt的版本由5更新到6gitlog--.\ports\vtkcommit27fb19bdcc1f6ddb1261cffb5372724ac1d63a93Author:LilyWang<[email protected]>Date:2023-08-23[manyports]FixURLSofdownlo......