欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Qt 基本控件的使用

程序员文章站 2022-05-28 11:55:11
...

    控件是界面设计的基本部件,也是各大Qt组件中最基本的功能。本文将通过代码讲解Qt中复选框、单选框、文本框、布局控件的使用。

    首先创建一个名为dialog的QDialog项目。然后回自动生成dialog.h、dialog.c、main.c。

    本文中的例子包括三个复选框的水平布局,并用复选框来设置文本框中文字的下划线、斜体、加粗功能;包括三个单选框的水平布局,并用单选框来设置文本框文字的颜色;然后设置文本框中的文字内容和字体;并设置三个确定、取消、退出按钮;完成相关槽函数的连接。

    dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QCheckBox>
#include <QRadioButton>
#include <QPlainTextEdit>
#include <QPushButton>

class Dialog : public QDialog
{
    Q_OBJECT

private:
    //定义各个控件的指针
    QCheckBox *chkBoxUnder;
    QCheckBox *chkBoxItalic;
    QCheckBox *chkBoxBold;
    QRadioButton *rBtnBlack;
    QRadioButton *rBtnRed;
    QRadioButton *rBtnBlue;
    QPlainTextEdit *txtEdit;
    QPushButton *btnOK;
    QPushButton *btnCancel;
    QPushButton *btnClose;

    void iniUI();//初始化界面函数
    void iniSignalSlots();//初始化信号与槽函数

private slots://定义槽函数
    void on_chkBoxUnder(bool checked);
    void on_chkBoxItalic(bool checked);
    void on_chkBoxBold(bool checked);
    void setTextFontColor();

public:
    Dialog(QWidget *parent = nullptr);
    ~Dialog();
};
#endif // DIALOG_H

头文件中定义了各控件的指针,定义了功能函数,定义了槽函数。

 

dialog.c

#include "dialog.h"
#include <QHBoxLayout>

//初始化界面
void Dialog::iniUI()
{
    //创建复选框,水平布局
    chkBoxUnder = new QCheckBox(tr("Underline"));//为三个复选框分配内存
    chkBoxItalic = new QCheckBox(tr("Italic"));
    chkBoxBold = new QCheckBox(tr("Bold"));
    QHBoxLayout *HLay1 = new QHBoxLayout;//为水平布局控件分配内存
    HLay1->addWidget(chkBoxUnder);//将三个复选框添加到水平布局中
    HLay1->addWidget(chkBoxItalic);
    HLay1->addWidget(chkBoxBold);

    //创建单选框,水平布局
    rBtnBlack = new QRadioButton(tr("Black"));
    rBtnBlack->setChecked(true);
    rBtnRed = new QRadioButton(tr("Red"));
    rBtnBlue = new QRadioButton(tr("Blue"));
    QHBoxLayout *HLay2 = new QHBoxLayout;
    HLay2->addWidget(rBtnBlack);
    HLay2->addWidget(rBtnRed);
    HLay2->addWidget(rBtnBlue);

    //创建按钮,水平布局
    btnOK = new QPushButton(tr("确定"));
    btnCancel = new QPushButton(tr("取消"));
    btnClose = new QPushButton(tr("退出"));
    QHBoxLayout *HLay3 = new QHBoxLayout;
    HLay3->addStretch();
    HLay3->addWidget(btnOK);
    HLay3->addWidget(btnCancel);
    HLay3->addStretch();
    HLay3->addWidget(btnClose);

    //创建文本框,设置字体
    txtEdit = new QPlainTextEdit;
    txtEdit->setPlainText("Hello Qt\n\nThis is a \"TextEdit\"");
    QFont font = txtEdit->font();
    font.setPointSize(15);
    txtEdit->setFont(font);

    //创建垂直布局,设置为主布局
    QVBoxLayout * VLay = new QVBoxLayout;
    VLay->addLayout(HLay1);
    VLay->addLayout(HLay2);
    VLay->addWidget(txtEdit);
    VLay->addLayout(HLay3);
    setLayout(VLay);
}


void Dialog::iniSignalSlots()
{
    //单选框的信号与槽
    connect(rBtnBlue, SIGNAL(clicked()), this, SLOT(setTextFontColor()));
    connect(rBtnRed, SIGNAL(clicked()), this, SLOT(setTextFontColor()));
    connect(rBtnBlack, SIGNAL(clicked()), this, SLOT(setTextFontColor()));

    //复选框信号与槽
    connect(chkBoxUnder, SIGNAL(clicked(bool)), this, SLOT(on_chkBoxUnder(bool)));
    connect(chkBoxItalic, SIGNAL(clicked(bool)), this, SLOT(on_chkBoxItalic(bool)));
    connect(chkBoxBold, SIGNAL(clicked(bool)), this, SLOT(on_chkBoxBold(bool)));

    //按钮信号与槽
    connect(btnOK, SIGNAL(clicked()), this, SLOT(accept()));
    connect(btnCancel, SIGNAL(clicked()), this, SLOT(reject()));
    connect(btnClose, SIGNAL(clicked()), this, SLOT(close()));

}

void Dialog::on_chkBoxUnder(bool checked)
{
    QFont font = txtEdit->font();
    font.setUnderline(checked);
    txtEdit->setFont(font);
}

void Dialog::on_chkBoxItalic(bool checked)
{
    QFont font=txtEdit->font();
    font.setItalic(checked);
    txtEdit->setFont(font);
}

void Dialog::on_chkBoxBold(bool checked)
{
    QFont font=txtEdit->font();
    font.setBold(checked);
    txtEdit->setFont(font);
}

void Dialog::setTextFontColor()
{
    QPalette plet = txtEdit->palette();

    if (rBtnBlue->isChecked())
        plet.setColor(QPalette::Text,Qt::blue);
    else if (rBtnRed->isChecked())
        plet.setColor(QPalette::Text,Qt::red);
    else if (rBtnBlack->isChecked())
        plet.setColor(QPalette::Text,Qt::black);
    else
        plet.setColor(QPalette::Text,Qt::black);

    txtEdit->setPalette(plet);
}

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    iniUI();
    iniSignalSlots();
    setWindowTitle("基本控件演示");
}

Dialog::~Dialog()
{
}

源文件中是各个函数的具体实现,具体功能看代码注释。

最终可得到如下功能界面。

Qt 基本控件的使用

源码链接为:

 

相关标签: qt gui c++