QT----------常用界面组件的使用

news2025/1/4 5:38:41

一、QComboBox 类

  • 主要功能:提供一个下拉列表,用户可以从中选择一个或多个选项。
#include <QApplication>
#include <QComboBox>
#include <QVBoxLayout>
#include <QWidget>
#include <QMessageBox>


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


    QWidget window;
    QVBoxLayout *layout = new QVBoxLayout(&window);


    QComboBox *comboBox = new QComboBox;
    comboBox->addItem("Option 1");
    comboBox->addItem("Option 2");
    comboBox->addItem("Option 3");


    QObject::connect(comboBox, QOverload<int>::of(&QComboBox::activated), [=](int index) {
        QMessageBox::information(&window, "ComboBox", "Selected item: " + comboBox->itemText(index));
    });


    layout->addWidget(comboBox);


    window.show();


    return app.exec();
}
  • 代码解释
    1. 创建一个 QComboBox 对象。
    2. 使用 addItem 方法添加选项。
    3. 使用 QObject::connect 连接 activated 信号,当用户选择一个选项时,会弹出消息框显示选择的选项文本。

二、QMainWindow 和 QAction

  • QMainWindow:通常作为主窗口,提供了菜单栏、工具栏、状态栏等的标准布局。
  • QAction:可以封装一个操作,例如保存、打开文件等,可以添加到菜单、工具栏等。
#include <QApplication>
#include <QMainWindow>
#include <QAction>
#include <QMenuBar>
#include <QToolBar>
#include <QMessageBox>


class MainWindow : public QMainWindow
{
public:
    MainWindow()
    {
        QAction *action = new QAction("Open", this);
        connect(action, &QAction::triggered, this, [=]() {
            QMessageBox::information(this, "Action", "Open action triggered");
        });


        QMenu *fileMenu = menuBar()->addMenu("File");
        fileMenu->addAction(action);


        QToolBar *toolBar = addToolBar("File");
        toolBar->addAction(action);
    }
};


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


    MainWindow mainWindow;
    mainWindow.show();


    return app.exec();
}
  • 代码解释
    1. 创建一个 QAction 并关联一个槽函数,当触发时弹出消息框。
    2. 创建一个 QMenu 并添加 QAction
    3. 创建一个 QToolBar 并添加 QAction

三、窗口界面可视化设计

  • 使用 Qt Designer:可以通过 Qt Designer 进行可视化设计,将所需组件拖放到界面上,设置属性,创建布局等。设计完成后会生成 .ui 文件,可通过 uic 工具将其转换为 C++ 代码。
#include <QApplication>
#include <QtUiTools/QtUiTools>


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


    QUiLoader loader;
    QFile file(":/path/to/your/ui/file.ui");
    file.open(QFile::ReadOnly);


    QWidget *widget = loader.load(&file);
    file.close();


    widget->show();


    return app.exec();
}
  • 代码解释
    1. 使用 QUiLoader 加载 .ui 文件。
    2. 将文件打开并读取,然后使用 loader.load 加载界面。

四、QToolBar 类

  • 主要功能:提供一个工具条,可包含多个工具按钮,通常用于快速访问常用操作。
#include <QApplication>
#include <QMainWindow>
#include <QToolBar>
#include <QAction>


class MainWindow : public QMainWindow
{
public:
    MainWindow()
    {
        QToolBar *toolBar = new QToolBar(this);


        QAction *action1 = new QAction("Action 1", this);
        QAction *action2 = new QAction("Action 2", this);


        toolBar->addAction(action1);
        toolBar->addAction(action2);


        addToolBar(toolBar);
    }
};


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


    MainWindow mainWindow;
    mainWindow.show();


    return app.exec();
}
  • 代码解释
    1. 创建 QToolBar 对象。
    2. 创建 QAction 对象并添加到 QToolBar

五、QStatusBar 类

  • 主要功能:用于显示状态信息,通常在窗口底部。
#include <QApplication>
#include <QMainWindow>
#include <QStatusBar>


class MainWindow : public QMainWindow
{
public:
    MainWindow()
    {
        QStatusBar *statusBar = new QStatusBar(this);
        statusBar->showMessage("Ready");
        setStatusBar(statusBar);
    }
};


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


    MainWindow mainWindow;
    mainWindow.show();


    return app.exec();
}
  • 代码解释
    1. 创建 QStatusBar 对象。
    2. 使用 showMessage 显示状态信息。

在这里插入图片描述

六、混合 UI 设计

  • 可以将代码创建的 UI 元素和 Qt Designer 设计的 UI 元素结合使用。
#include <QApplication>
#include <QMainWindow>
#include <QVBoxLayout>
#include <QPushButton>
#include <QtUiTools/QtUiTools>


class MainWindow : public QMainWindow
{
public:
    MainWindow()
    {
        QUiLoader loader;
        QFile file(":/path/to/your/ui/file.ui");
        file.open(QFile::ReadOnly);


        QWidget *uiWidget = loader.load(&file);
        file.close();


        QVBoxLayout *layout = new QVBoxLayout;


        QPushButton *button = new QPushButton("Button");
        layout->addWidget(button);


        QWidget *centralWidget = new QWidget;
        centralWidget->setLayout(layout);


        setCentralWidget(centralWidget);


        setCentralWidget(uiWidget);
    }
};


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


    MainWindow mainWindow;
    mainWindow.show();


    return app.exec();
}
  • 代码解释
    1. 使用 QUiLoader 加载 .ui 文件。
    2. 创建 QPushButton 并添加到布局。
    3. 将布局设置给一个 QWidget 并作为主窗口的中央部件。

七、QPlainTextEdit 的使用

  • 主要功能:提供一个可编辑的多行文本区域。
#include <QApplication>
#include <QPlainTextEdit>
#include <QVBoxLayout>
#include <QWidget>


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


    QWidget widget;
    QVBoxLayout *layout = new QVBoxLayout(&widget);


    QPlainTextEdit *plainTextEdit = new QPlainTextEdit;
    layout->addWidget(plainTextEdit);


    widget.show();


    return app.exec();
}
  • 代码解释
    1. 创建 QPlainTextEdit 对象。
    2. 添加到布局。

八、QToolButton 和 QListWidget

  • QToolButton:可以作为工具条上的按钮,支持多种显示模式和操作。
  • QListWidget:提供一个列表,可显示多个条目。
#include <QApplication>
#include <QMainWindow>
#include <QToolBar>
#include <QToolButton>
#include <QListWidget>


class MainWindow : public QMainWindow
{
public:
    MainWindow()
    {
        QToolBar *toolBar = new QToolBar(this);


        QToolButton *toolButton = new QToolButton(this);
        toolButton->setText("Tool Button");


        toolBar->addWidget(toolButton);


        QListWidget *listWidget = new QListWidget(this);
        listWidget->addItem("Item 1");
        listWidget->addItem("Item 2");


        setCentralWidget(listWidget);


        addToolBar(toolBar);
    }
};


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


    MainWindow mainWindow;
    mainWindow.show();


    return app.exec();
}
  • 代码解释
    1. 创建 QToolButton 并添加到 QToolBar
    2. 创建 QListWidget 并添加条目,作为中央部件。

九、创建右键快捷菜单

  • 可以为 QWidget 或其子类添加右键快捷菜单。
#include <QApplication>
#include <QWidget>
#include <QMenu>
#include <QAction>
#include <QContextMenuEvent>


class MyWidget : public QWidget
{
protected:
    void contextMenuEvent(QContextMenuEvent *event) override
    {
        QMenu menu(this);


        QAction *action = new QAction("Action", this);


        connect(action, &QAction::triggered, this, [=]() {
            // 执行相应操作
        });


        menu.addAction(action);


        menu.exec(event->globalPos());
    }
};


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


    MyWidget widget;
    widget.show();


    return app.exec();
}
  • 代码解释
    1. 重写 contextMenuEvent 方法。
    2. 创建 QMenu 并添加 QAction

十、QTreeWidget 和 QTableWidget

  • QTreeWidget:用于显示树状结构的数据。
  • QTableWidget:用于显示表格数据。
#include <QApplication>
#include <QTreeWidget>
#include <QTableWidget>
#include <QVBoxLayout>
#include <QWidget>


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


    QWidget widget;
    QVBoxLayout *layout = new QVBoxLayout(&widget);


    QTreeWidget *treeWidget = new QTreeWidget;
    treeWidget->setColumnCount(1);
    QTreeWidgetItem *item1 = new QTreeWidgetItem(treeWidget);
    item1->setText(0, "Item 1");


    QTableWidget *tableWidget = new QTableWidget;
    tableWidget->setRowCount(2);
    tableWidget->setColumnCount(2);
    tableWidget->setItem(0, 0, new QTableWidgetItem("Cell 1"));


    layout->addWidget(treeWidget);
    layout->addWidget(tableWidget);


    widget.show();


    return app.exec();
}
  • 代码解释
    1. 创建 QTreeWidget 并添加 QTreeWidgetItem
    2. 创建 QTableWidget 并添加 QTableWidgetItem

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2269003.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AIDD -人工智能药物设计- DrugChat:多模态大语言模型实现药物机制与属性的全方位预测

DrugChat&#xff1a;多模态大语言模型实现药物机制与属性的全方位预测 今天为大家介绍的是来自加州大学圣地亚哥分校谢澎涛团队的一篇论文。准确预测潜在药物分子的作用机制和性质对于推进药物发现至关重要。然而&#xff0c;传统方法通常需要为每个特定的预测任务开发专门的…

智能化人才招聘系统是怎样的?

随着企业规模的扩大和业务范围的拓展&#xff0c;人才招聘成为了企业发展的关键环节。然而&#xff0c;市面上的人才招聘系统琳琅满目&#xff0c;质量参差不齐&#xff0c;许多企业发现&#xff0c;并非所有系统都能满足他们的需求&#xff0c;特别是智能化的需求。今天&#…

分布式专题(9)之Mysql高可用方案

一、分库分表概念 数据库&#xff0c;应该是一个应用当中最为核心的价值所在&#xff0c;也是开发过程中必须熟练掌握的工具。之前我们就学习过很多对MySQL的调优。但是随着现在互联网应用越来越大&#xff0c;数据库会频繁的成为整个应用的性能瓶颈。我们经常使用的MySQL数据库…

LockSupport的源码实现原理(一)

目录 底层源码分析 线程状态变化 许可证机制 中断处理 底层源码分析 public class LockSupport {// Unsafe实例private static final Unsafe U Unsafe.getUnsafe();// Thread对象中parkBlocker字段的偏移量private static final long PARKBLOCKER U.objectFieldOffset(Thre…

CannotRetrieveUpdates alert in disconnected OCP 4 cluster解决

环境&#xff1a; Red Hat OpenShift Container Platform (RHOCP) 4 问题&#xff1a; Cluster Version Operator 不断发送警报&#xff0c;表示在受限网络/断开连接的 OCP 4 集群中无法接收更新。 在隔离的 OpenShift 4 集群中看到 CannotRetrieveUpdates 警报&#xff1a; …

智能家居体验大变革 博联 AI 方案让智能不再繁琐

1. 全球AI技术发展背景及智能家居市场趋势 人工智能&#xff08;AI&#xff09;技术的飞速发展正在推动全球各行业的数字化转型。国际电信联盟与德勤联合发布《人工智能向善影响》报告指出&#xff0c;全球94%的商界领袖认为&#xff0c;人工智能技术对于其企业在未来5年内的发…

logback日志框架源码分析

目录 (一)入口:slf4j选择日志框架 (二)日志框架初始化 (1)logback的3种配置方式 a、BasicConfigurator默认配置 b、SPI方式配置的Configurator实现类 c、通过配置文件初始化 (2)xml配置文件初始化 (三)Logger的创建 (四)打印日志 本文源码基于:logback版…

VScode 只能运行c,运行不了c++的解决问题

原文链接&#xff1a;Vscode只能运行c&#xff0c;运行不了c的解决方法 VScode 只能运行c&#xff0c;运行不了c&#xff0c;怎么回事呢&#xff0c;解决问题&#xff1a; 在tasks.json中加上“"-lstdc"”&#xff0c; 这样之后 要重启VScode&#xff0c;点击链接…

HTML——45.单元格合并

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>表格</title></head><body><!--合并单元格&#xff1a;1.在代码中找到要合并的单元格2.在要合并的所有单元格中&#xff0c;保留要合并的第一个单元格…

记录第一次跑YOLOV8做目标检测

今天是24年的最后一天&#xff0c;终于要向新世界开始破门了&#xff0c;开始深度学习&#xff0c;YOLO来敲门~ 最近做了一些皮肤检测的功能&#xff0c;在传统的处理中经历了反复挣扎&#xff0c;终于要上YOLO了。听过、看过&#xff0c;不如上手体会过~ 1、YOLO是什么&#x…

如何配置Java应用程序的远程调试

配置Java应用程序的远程调试涉及几个步骤&#xff0c;包括在启动Java应用程序时设置特定的JVM参数&#xff0c;以及在IDE&#xff08;如Eclipse、IntelliJ IDEA等&#xff09;中配置远程调试连接。以下是详细的步骤&#xff1a; 启动Java应用程序时启用远程调试 为了能够远程…

2025考研江南大学复试科目控制综合(初试807自动控制原理)

​ 2025年全国硕士研究生招生考试江南大学考点 一年年的考研如期而至&#xff0c;我也变成了研二了&#xff0c;作为2次考研经历的学长&#xff0c;总是情不自禁地回想起自己的考研经历&#xff0c;我也会经常从那段经历中汲取力量。我能理解大多数考生考完后的的迷茫无助&…

时间序列预测算法---LSTM

文章目录 一、前言1.1、深度学习时间序列一般是几维数据&#xff1f;每个维度的名字是什么&#xff1f;通常代表什么含义&#xff1f;1.2、为什么机器学习/深度学习算法无法处理时间序列数据?1.3、RNN(循环神经网络)处理时间序列数据的思路&#xff1f;1.4、RNN存在哪些问题?…

[羊城杯 2024]不一样的数据库_2

题目描述&#xff1a; 压缩包6 (1).zip需要解压密码&#xff1a; 尝试用ARCHPR工具爆破一下&#xff1a; &#xff08;字典可自行在github上查找&#xff09; 解压密码为&#xff1a;753951 解压得到13.png和Kee.kdbx文件&#xff1a; 二维码图片看上去只缺了正常的三个角&…

图像处理-Ch7-小波函数

个人博客&#xff01;无广告观看&#xff0c;因为这节内容太多了&#xff0c;有点放不下&#xff0c;分了三节 文章目录 多分辨率展开(Multi-resolution Expansions)序列展开(Series Expansions)尺度函数(Scaling Function)例&#xff1a;哈尔尺度函数(Haar scaling func)多分…

CPT203 Software Engineering 软件工程 Pt.2 敏捷方法和需求工程(中英双语)

文章目录 3. Aglie methods&#xff08;敏捷方法&#xff09;3.1 Aglie methods&#xff08;敏捷方法&#xff09;3.1.1 特点3.1.2 优点3.1.3 缺点3.1.4 原则3.1.5 计划驱动与敏捷方法的对比 3.2 Scrum3.2.1 Scrum roles3.2.2 Scrum Activities and Artifacts3.2.2.1 Product B…

【人工智能机器学习基础篇】——深入详解深度学习之神经网络基础:理解前馈神经网络与反向传播算法

深入详解深度学习之神经网络基础&#xff1a;理解前馈神经网络与反向传播算法 深度学习作为人工智能&#xff08;AI&#xff09;的核心技术&#xff0c;已经在语音识别、图像处理、自然语言处理等诸多领域取得了显著的成果。而在深度学习的众多模型中&#xff0c;**前馈神经网络…

【循环神经网络】RNN介绍

在人工神经网络中&#xff0c;”浅层网络”是指具有一个输入层、一个输出层和最多一个没有循环连接的隐藏层的网络。随着层数的增加&#xff0c;网络的复杂性也在增加。更多的层或循环连接通常会增加网络的深度&#xff0c;并使其能够提供不同级别的数据表示和特征提取&#xf…

【论文投稿】Python 网络爬虫:探秘网页数据抓取的奇妙世界

【IEEE出版|广东工业大学主办】第五届神经网络、信息与通信工程国际学术会议&#xff08;NNICE 2025&#xff09;_艾思科蓝_学术一站式服务平台 目录 前言 一、Python—— 网络爬虫的绝佳拍档 二、网络爬虫基础&#xff1a;揭开神秘面纱 &#xff08;一&#xff09;工作原…

基于深度学习的视觉检测小项目(二) 环境和框架搭建

一、环境和框架要求 SAM的环境要求&#xff1a; Python>3.7 PyTorch>1.7 torchvision>0.8 YOLO V8的环境要求&#xff1a;YOLO集成在ultralytics库中&#xff0c;ultralytics库的环境要求&#xff1a; Python>3.7 PyTorch>1.10.0 1、确定pytorch版本…