跳至正文
View Categories

2 min read

Qt提供了大量基本UI组件类,可以满足我们开发需求,下来列举一些常用组件。

QLabel类 #

QLabel类可以显示文字,图片等内容。

演示代码。

#include <QApplication>
#include <QLabel>

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

    QLabel label("hello world");
    label.show();

    return a.exec();
}

运行结果。

QPushButton类 #

QPushButton类提供了一个按钮的功能,常用来接受用户鼠标点击事件。

演示代码。

#include <QApplication>
#include <QPushButton>

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

    QPushButton button("OK");
    button.show();

    return a.exec();
}

运行结果。

QLineEdit类 #

QLineEdit类是一个单行的编辑框,可用来接收少量文本输入,例如账号密码等。

演示代码。

#include <QApplication>
#include <QLineEdit>

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

    QLineEdit edit("hello");
    edit.show();

    return a.exec();
}

运行结果。

QGroupBox类和QRadioButton类 #

QGroupBox类可以将多个组件进行分组,有利于界面美观整洁。也可用于实现单选按钮的互斥。

演示代码。

#include <QApplication>
#include <QGroupBox>
#include <QRadioButton>
#include <QVBoxLayout>
#include <QObject>

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

    QGroupBox *groupBox = new QGroupBox(QObject::tr("Exclusive Radio Buttons"));

    QRadioButton *radio1 = new QRadioButton(QObject::tr("&Radio button 1"));
    QRadioButton *radio2 = new QRadioButton(QObject::tr("R&adio button 2"));
    QRadioButton *radio3 = new QRadioButton(QObject::tr("Ra&dio button 3"));

    radio1->setChecked(true);

    QVBoxLayout *vbox = new QVBoxLayout;
    vbox->addWidget(radio1);
    vbox->addWidget(radio2);
    vbox->addWidget(radio3);
    vbox->addStretch(1);
    groupBox->setLayout(vbox);
    groupBox->setWindowTitle("https://dashima.net/");
    groupBox->show();

    return a.exec();
}

运行结果。三个单选框互斥,既就是只能选中一个。

QProgressBar类和QTimer类 #

QProgressBar类提供一个进度条的功能。

QTimer提供一个定时器的功能,UI不显示。

演示代码。

#include <QApplication>
#include <QProgressBar>
#include <QTimer>
#include <QObject>

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

    QTimer timer;
    timer.setInterval(500);

    QProgressBar *bar= new QProgressBar();
    bar->setRange(0, 100);
    bar->setValue(0);
    bar->setTextVisible(true);

    QObject::connect(&timer, &QTimer::timeout, [=](){
        bar->setValue(bar->value()+1);

    });

    bar->show();
    timer.start();

    return a.exec();
}

运行结果。

QSlider类和QLabel类 #

QSlider是一个滑块条,可供用户拖动调节参数。

演示代码。

#include <QApplication>
#include <QSlider>
#include <QLabel>
#include <QHBoxLayout>
#include <QObject>

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

    QLabel label;
    QSlider slider;

    slider.setRange(0, 100);
    slider.setOrientation(Qt::Orientation::Horizontal);

    QObject::connect(&slider, SIGNAL(sliderMoved(int)), &label, SLOT(setNum(int)));
    QHBoxLayout hl;
    hl.addWidget(&slider);
    hl.addWidget(&label);

    QWidget widget;
    widget.setLayout(&hl);
    widget.show();

    return a.exec();
}

运行结果。label内容随着滑块的改变而改变。

更多 #

我们可以在设计界面更直观的看到各种UI组件。

Qt库中所有类都是以大写的Q字母开头,可在Qt的帮助文档中搜索类名,查看更具体的介绍。

点击 帮助》索引 进行关键字检索。

Qt中所有能在桌面显示的类,他们都继承自QWidget,非UI相关的类继承自QObject。

Qt官方在线文档: https://doc.qt.io/qt-5.15/