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
相关推荐
黄霑和金庸我都喜欢12 分钟前
桌面开发 的设计模式(Design Patterns)核心知识
开发语言·后端·golang
晚雾也有归处14 分钟前
结构体(C语言)
c语言·开发语言·数据结构·算法
qq_4335545423 分钟前
C++面向对象编程:纯虚函数、抽象类、虚析构、纯虚析构
开发语言·c++·算法
佛系小嘟嘟2 小时前
Android Jetpack Compose开发小组件【入门篇】
android·开发语言·android jetpack·小组件
Java知识日历3 小时前
【内含例子代码】Spring框架的设计模式应用(第二集)
java·开发语言·后端·spring·设计模式
尘浮生5 小时前
Java项目实战II基于微信小程序的家庭大厨(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven
军训猫猫头6 小时前
36.Add的用法 C#例子
开发语言·c#
暗碳7 小时前
cloudns二级免费域名python更新ipv6 dns记录
开发语言·python
个人开发-胡涂涂9 小时前
开源:软件世界的革命者
开发语言·开源