当前位置: 首页 > article >正文

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

一、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.kler.cn/a/461522.html

相关文章:

  • SQLALchemy如何将SQL语句编译为特定数据库方言
  • 【可实战】需求分析-测试计划↓-测试设计-测试执行-测试总结↓(包含测试计划、测试总结模板,以公司要求为准)
  • Cause: java.sql.SQLException: sql injection violation, comment not allow异常问题处理
  • LeetCode:106.从中序与后序遍历序列构造二叉树
  • 快速上手LangChain(三)构建检索增强生成(RAG)应用
  • VMware去虚拟化
  • 2024 AI产品经理在大模型的探索与实践(附学习资料下载)
  • 低空经济迅猛发展,无人机服务拔得头筹
  • 2021-04-14 输入一个数,判断奇偶性,若是奇数乘以2,若是偶数除2,得到结果若是三位数则反序,否则输出计算结果
  • Java 溯本求源之基础(三十三)——接口
  • 使用logrotate工具来管理和轮转日志文件
  • 007-构建工具大进步:Amper Amper Amper!
  • 论文研读:Tune-a-video — 微调学习单个视频内的物体动作(Arxiv: 2023-03-17)
  • 智能边缘计算×软硬件一体化:开启全场景效能革命新征程(高校开发者作品)
  • 【MySQL初级】第5-11章
  • 职场中倾听比表达更显智慧
  • 【传感器技术】第7章 温度传感器,热电偶,热电阻,热敏电阻,集成温度传感器
  • Prometheus + Grafana 监控,验证 Hystrix 超时熔断
  • 期末速成C++【模板和STL和算法】
  • sqlserver设置定时任务计划(SSMS)
  • 遗传算法的介绍
  • REDIS2.0
  • vue项目中使用mockjs模拟后端接口
  • 9-Gin 中自定义 Model --[Gin 框架入门精讲与实战案例]
  • ARM64 Windows 10 IoT工控主板运行x86程序效率测试
  • 使用OpenAI、LangChain、MongoDB构建一个AI agent