Qt 控件的简单实例化

记录一个初学小白的学习过程,记录一些浅显的学习笔记


GroupBox

GroupBox 控件的作用是组织界面元素,将一组相关的控件组合在一起,并在顶部显示一个标题。

基类:QWidget  (第一部分是widget.h)(第二部分是widget.cpp)

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QGroupBox>
#include<QRadioButton>
#include<QPushButton>
#include<QCheckBox>
#include<QVBoxLayout> //可以在水平方向和垂直方向进行排列的控件 QHBoxLayout/QVBoxLayout所继承
#include <QGridLayout>
#include <QMenu>
class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
};
#endif // WIDGET_H
#include "widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    //组合框 1 gpb_1
    QGroupBox *gpb_1=new QGroupBox("互相排斥单选按钮组1");
    QRadioButton *rbtn_1 = new QRadioButton("RadioButton1");
    QRadioButton *rbtn_2 = new QRadioButton("RadioButton2");
    QRadioButton *rbtn_3 = new QRadioButton("RadioButton3");

    QVBoxLayout *vbly1=new QVBoxLayout;
    vbly1->addWidget(rbtn_1);
    vbly1->addWidget(rbtn_2);
    vbly1->addWidget(rbtn_3);
    gpb_1->setLayout(vbly1);  //设置组合框内容是纵向布局

    //组合框 2 gpb_2
     QGroupBox *gpb_2=new QGroupBox("复选按钮组2");
     QCheckBox *cbx1=new QCheckBox("checkbox1");
     QCheckBox *cbx2=new QCheckBox("checkbox2");
     QCheckBox *cbx3=new QCheckBox("checkbox3");

     cbx2->setTristate(true); //实现复选框支持半选状态,默认不支持半选
     cbx2->setChecked(true);  //实现默认选择

     QVBoxLayout *vbly2=new QVBoxLayout;
     vbly2->addWidget(cbx1);
     vbly2->addWidget(cbx2);
     vbly2->addWidget(cbx3);
     gpb_2->setLayout(vbly2);

    //组合框 3 gpb_3
    QGroupBox *gpb_3=new QGroupBox("单选和复选按钮组3");

    gpb_3->setCheckable(true);  //组合框的选中与否按钮

    QRadioButton *rbtn_31 = new QRadioButton("RadioButton31");
    QRadioButton *rbtn_32 = new QRadioButton("RadioButton32");
    QRadioButton *rbtn_33 = new QRadioButton("RadioButton33");
    QCheckBox *cbx4= new QCheckBox("checkbox4");

    QVBoxLayout *vbly3=new QVBoxLayout;
    vbly3->addWidget(rbtn_31);
    vbly3->addWidget(rbtn_32);
    vbly3->addWidget(rbtn_33);
    vbly3->addWidget(cbx4);
    gpb_3->setLayout(vbly3);

     //组合框 4 gpb_4
    QGroupBox *gpb_4=new QGroupBox("综合按钮组4");
    gpb_4->setCheckable(true); //这个是其所有内容能不能选 (true就是默认能选)
    gpb_4->setChecked(true);   //这个是内容本身要默认选上
    QPushButton *pbtn_4 = new QPushButton("QPushButton4");
    QPushButton *pbtn_5 = new QPushButton("QPushButton5");
    pbtn_5->setCheckable(true);  //理解:使不能选择的可以选择
    pbtn_5->setChecked(true);
    QPushButton *pbtn_6 = new QPushButton("QPushButton6");

    QVBoxLayout *vbly4=new QVBoxLayout;
    vbly4->addWidget(pbtn_4);
    vbly4->addWidget(pbtn_5);
    vbly4->addWidget(pbtn_6);  //理解:纵向布局对象包含这3个对象
    gpb_4->setLayout(vbly4);  //理解:组合框使用这个纵向布局,以及其内容

    //命令按钮添加子菜单
    QMenu *mu = new QMenu(this);
    mu->addAction("King");  //子菜单添加内容函数***
    mu->addAction("Darren");
    mu->addAction("Mark");
    mu->addAction("Vico");
    pbtn_6->setMenu(mu);

    QGridLayout *gdlyout =new QGridLayout;
    gdlyout->addWidget(gpb_1,0,0,1,1);  //设置组合框位置***
    gdlyout->addWidget(gpb_2,0,1,1,1);
    gdlyout->addWidget(gpb_3,1,0,1,1);
    gdlyout->addWidget(gpb_4,1,1,1,1);

    this->setLayout(gdlyout);  //显示组合框 ***

}

Widget::~Widget()
{
}

ScrollArea 

它允许用户在一个较小空间内查看和滚动一个较大的内容区域。即滚动条,直接在main 内实现。

#include "widget.h"

#include <QApplication>
#include <QLabel>
#include <QScrollArea>
#include <QGridLayout>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.resize(500,500);

    //滚动条外观是否漂亮取决于当前滚动条策略,可以查询官网实现
    QLabel *qljpg =new QLabel;
    qljpg->setScaledContents(true);
    QImage imagejpg(":/new/prefix1/images/3.jpg");
    qljpg->setPixmap(QPixmap::fromImage(imagejpg));

    QScrollArea *sArea=new QScrollArea;

    sArea->setAlignment(Qt::AlignCenter);  //居中

    sArea->setWidgetResizable(true);  //根据窗口比例显示

    sArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
    sArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    //这两个最后的参数就是设置 滚动条的那个条是否要显示出来

    sArea->setWidget(qljpg);

    QGridLayout *glayout=new QGridLayout;
    glayout->addWidget(sArea);

    w.setLayout(glayout);

    w.show();
    return a.exec();
}

 TabWidget

是一个用于组织和管理多个相似或相关内容的控件。允许你在一个窗口中创建多个标签页,每个标签页都可以显示不同的用户界面内容。

基类:QWidget 

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTabWidget>
#include <QGridLayout>
#include <QLabel>
#include <QPushButton>
#include <QLineEdit>
#include <QMessageBox>
class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
private:
    QTabWidget *tabwidgetUI;
private slots:
    void MsgCommit();
};
#endif // WIDGET_H
#include "widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    this->setWindowTitle("标签小部件测试");
    this->setGeometry(300,200,1000,800);

    tabwidgetUI=new QTabWidget(this);
    tabwidgetUI->setGeometry(20,20,960,760);
    tabwidgetUI->show();

    bool m_showtabwidgetui1=true;
    bool m_showtabwidgetui2=true;
    //bool m_showtabwidgetui3=false;
    //bool m_showtabwidgetui4=false;

    if(m_showtabwidgetui1)
    {
        QWidget *qwidget1=new QWidget();
        tabwidgetUI->addTab(qwidget1,"进程");

        QGridLayout *glayout =new QGridLayout();
        QLabel *lab1 =new QLabel("请选择文件及文件夹:");
        QLineEdit *ledit1=new QLineEdit();
        QPushButton *pbt1=new QPushButton("消息框...");
        connect(pbt1,SIGNAL(clicked(bool)),this,SLOT(MsgCommit()));

        glayout->addWidget(lab1,0,0);
        glayout->addWidget(ledit1,0,1);
        glayout->addWidget(pbt1,0,3);

        qwidget1->setLayout(glayout);

    }
    if(m_showtabwidgetui2)
    {
        QWidget *qwidget2=new QWidget();
        tabwidgetUI->addTab(qwidget2,"性能");
    }
}

Widget::~Widget()
{
}

void Widget::MsgCommit()
{
    QMessageBox::information(NULL,"Test","QMessageBox:成功",QMessageBox::Ok);
}

Frame

它可以用来创建带有边框的矩形区域,QFrame 是一个通用的控件,可以根据需要被配置为多种样式,例如边框样式、填充样式和布局方向等。它通常用于组织其他控件,以及为它们提供视觉边界和结构。     

基类:Qwidget  这里用ui界面直接布局了

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    setWindowTitle("Fram测试");
    ui->frame1->setStyleSheet("background-color:red");
    ui->frame_2->setStyleSheet("background-color:green");

    ui->frame1->setLineWidth(2);
    ui->frame1->setMidLineWidth(2);
    ui->frame1->setFrameShape(QFrame::Box);

    ui->frame_2->setLineWidth(2);
    ui->frame_2->setMidLineWidth(4);
    ui->frame_2->setFrameShape(QFrame::Box);
    ui->frame_2->setFrameShadow(QFrame::Sunken);
}

Widget::~Widget()
{
    delete ui;
}

DockWidget

是一个用于在主窗口或其他 QDockWidget 中停靠和浮动的控件。它通常用于提供附加的功能窗口,例如工具栏、状态栏、属性编辑器或其他任何需要单独访问的用户界面元素。

基类:QMainWindow

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDockWidget>
#include <QLabel>
#include <QGridLayout>
#include <QComboBox>
#include <QPushButton>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QDockWidget *dw =new QDockWidget("停靠窗口测试:123",this);

    //设置颜色
    QPalette pal;
    pal.setColor(QPalette::Background,Qt::cyan);
    dw->setAutoFillBackground(true);
    dw->setPalette(pal);

    dw->setMaximumSize(300,300);

    //学习层次
    QLabel *lab = new QLabel("学历层次");
    QComboBox *cbx=new QComboBox();
    cbx->addItem("小学");
    cbx->addItem("初中");
    cbx->addItem("高中");
    cbx->addItem("专科");
    cbx->addItem("本科");
    cbx->addItem("硕士");
    cbx->addItem("博士");

    QPushButton *pbt1=new QPushButton("清华大学");
    QPushButton *pbt2=new QPushButton("北京大学");


    //通过栅格布局(网格布局)
    QGridLayout *glayout =new QGridLayout();
    glayout->addWidget(lab,0,0,1,1);
    glayout->addWidget(cbx,0,1,1,1);
    glayout->addWidget(pbt1,1,0,1,1);
    glayout->addWidget(pbt2,1,1,1,1);

    glayout->setHorizontalSpacing(10);  //设置水平距离
    glayout->setVerticalSpacing(10);    //设置垂直距离
    glayout->setContentsMargins(20,20,20,20); //设置上下左右距离

    QWidget *wdt=new QWidget();
    wdt->setLayout(glayout);
    dw->setWidget(wdt);
}

MainWindow::~MainWindow()
{
    delete ui;
}


 gg,推荐课程:https://xxetb.xetslk.com/s/kNPSd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值