记录一个初学小白的学习过程,记录一些浅显的学习笔记
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
标签:控件,Widget,Qt,实例,ui,QWidget,addWidget,new,include From: https://blog.csdn.net/2301_77671421/article/details/140286422