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

一、QComboBox 类

  • 主要功能:提供一个下拉列表,用户可以从中选择一个或多个选项。
cpp 复制代码
#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:可以封装一个操作,例如保存、打开文件等,可以添加到菜单、工具栏等。
cpp 复制代码
#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++ 代码。
cpp 复制代码
#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 类

  • 主要功能:提供一个工具条,可包含多个工具按钮,通常用于快速访问常用操作。
cpp 复制代码
#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 类

  • 主要功能:用于显示状态信息,通常在窗口底部。
cpp 复制代码
#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 元素结合使用。
cpp 复制代码
#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 的使用

  • 主要功能:提供一个可编辑的多行文本区域。
cpp 复制代码
#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:提供一个列表,可显示多个条目。
cpp 复制代码
#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 或其子类添加右键快捷菜单。
cpp 复制代码
#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:用于显示表格数据。
cpp 复制代码
#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
相关推荐
life_time_1 小时前
C语言(22)
c语言·开发语言
Minner-Scrapy2 小时前
DApp 开发入门指南
开发语言·python·web app
孤雪心殇2 小时前
简单易懂,解析Go语言中的Map
开发语言·数据结构·后端·golang·go
庸俗今天不摸鱼2 小时前
Canvas进阶-4、边界检测(流光,鼠标拖尾)
开发语言·前端·javascript·计算机外设
菠菠萝宝2 小时前
【Java八股文】10-数据结构与算法面试篇
java·开发语言·面试·红黑树·跳表·排序·lru
奔跑吧邓邓子2 小时前
【Python爬虫(36)】深挖多进程爬虫性能优化:从通信到负载均衡
开发语言·爬虫·python·性能优化·负载均衡·多进程
不会Hello World的小苗2 小时前
Java——链表(LinkedList)
java·开发语言·链表
lsx2024063 小时前
Perl 面向对象编程指南
开发语言
Allen Bright3 小时前
【Java基础-46.3】Java泛型通配符详解:解锁类型安全的灵活编程
java·开发语言