Qt控件
Layout Spacer
垂直布局QVBoxLayout
//修改窗口标准名称
w.setWindowTitle("垂直布局");
//设置窗口大小
w.resize(400,300);
//船舰QVBoxLayout布局,并且设置为父控件
QVBoxLayout * mainlayout=new QVBoxLayout(&w);
//船舰命令按钮控件添加到到QVBoxLayout布局
mainlayout->addWidget(new QPushButton("命令按钮1"));
mainlayout->addWidget(new QPushButton("命令按钮2"));
mainlayout->addWidget(new QPushButton("命令按钮3"));
//将QVBoxLayout设置为窗口的布局
w.setLayout(mainlayout);
水平排列布局QHBoxLayout
//修改窗口标准名称
w.setWindowTitle("水平布局");
//设置窗口大小
w.resize(400,300);
//创建水平布局实例
QHBoxLayout * hlayout=new QHBoxLayout;
//创建命令按钮控件添加到水平布局当中
QPushButton *button1=new QPushButton("命令按钮1");
QPushButton *button2=new QPushButton("命令按钮2");
QPushButton *button3=new QPushButton("命令按钮3");
hlayout->addWidget(button1);
hlayout->addWidget(button2);
hlayout->addWidget(button3);
//创建一个容器控件,用来设置水平布局
QWidget *container=new QWidget;
container->setLayout(hlayout);
//将容器控件添加到主容器的垂直布局当中
QVBoxLayout *mainLayout=new QVBoxLayout;
mainLayout->addWidget(container);
//设置窗口布局
w.setLayout(mainLayout);
网格布局 QGridLayout
头文件
源文件
button1=new QPushButton(this);
button1->setText("第一区:顶部菜单栏选项");
button1->setFixedHeight(100);
//让button1在水平和垂直方向上都尽可能扩展以占用更多的可用空间。
button1->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
button2=new QPushButton(this);
button2->setText("第二区:侧边栏选项");
button2->setFixedWidth(150);
button2->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
button3=new QPushButton(this);
button3->setText("第三区:底部选项");
button3->setFixedHeight(100);
button3->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
button4=new QPushButton(this);
button4->setText("第四区:子窗体选项");
button4->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
pGrid_layouts=new QGridLayout();
//通过此函数设置左侧 顶部 右侧 底部边距,主要方便布局周边进行使用
pGrid_layouts->setContentsMargins(0,0,0,0);
//显示位置
//addWidget(参数1,参数2,参数3,参数4,参数5,参数6)
/*
*1.我要插入的子布局对象
*2.插入的开始行
*3.插入的开始列
*4.占用的行数
*5.占用的列数
*6.指定对其方式
*/
pGrid_layouts->addWidget(button1,0,1);
pGrid_layouts->addWidget(button2,0,0,3,1);
pGrid_layouts->addWidget(button3,2,1);
pGrid_layouts->addWidget(button4,1,1);
表格布局 QFormLayout
setFixedSize(250,200);
//创建表单布局指针
QFormLayout *qLayout=new QFormLayout(this);
QLineEdit *le1=new QLineEdit();
QLineEdit *le2=new QLineEdit();
QLineEdit *le3=new QLineEdit();
qLayout->addRow("学号",le1);
qLayout->addRow("姓名",le2);
qLayout->addRow("学校",le3);
//WarpAllRows将标签现实中在单行编辑框上面
//qLayout->setRowWrapPolicy(QFormLayout::WrapAllRows);
//当标签和单选编辑框,将标签显示在同一行
qLayout->setLabelAlignment(Qt::AlignLeft);
setWindowTitle("表单布局测试");
Button Contain
命令按钮Push Button
第一种写法:全部写在源文件
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setGeometry(300,150,500,300);
//实例化两个命令按钮对象
QPushButton * pb1=new QPushButton("命令按钮",this);
QPushButton * pb2=new QPushButton("命令按钮",this);
//设置两个QPushButton对象的坐标位置
pb1->setGeometry(20,20,150,50);
pb2->setGeometry(20,90,150,50);
//与信号槽函数连接
connect(pb1,&QPushButton::clicked,this,[=](){
setStyleSheet("QMainWindow {background-color:rgba(255,255,0,100%)}");
});
connect(pb2,&QPushButton::clicked,this,[=](){
setStyleSheet("QMainWindow {background-color:rgba(255,0,0,100%)}");
});
}
第二种写法:在头文件定义,在源文件实现
头文件
源文件
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setGeometry(300,150,500,300);
//实例化两个命令按钮对象
pb1=new QPushButton("命令按钮",this);
pb2=new QPushButton("命令按钮",this);
//设置两个QPushButton对象的坐标位置
pb1->setGeometry(20,20,150,50);
pb2->setGeometry(20,90,150,50);
//与信号槽函数连接
connect(pb1,SIGNAL(clicked()),this,SLOT(pushbutton1_clicked()));
connect(pb2,SIGNAL(clicked()),this,SLOT(pushbutton2_clicked()));
}
void MainWindow::pushbutton1_clicked(){
setStyleSheet("QMainWindow {background-color:rgba(255,255,0,100%)}");
}
void MainWindow::pushbutton2_clicked(){
setStyleSheet("QMainWindow {background-color:rgba(255,0,0,100%)}");
}
工具按钮Tool Button
头文件
源文件
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setGeometry(300,150,500,300);
//实例化QToolBar对象
tbar=new QToolBar(this);
tbar->setGeometry(20,20,200,90);
//设置QStyle类对象进行实例化,主要目的设置风格,图标时系统自带
QStyle *sty=QApplication::style(); //获取当前应用程序的全局样式对象指针; QApplication::style() 返回应用程序默认的QStyle对象
QIcon ico=sty->standardIcon(QStyle::SP_TitleBarContextHelpButton);
//设置QToolButton对象进行实例化
tbutton=new QToolButton();
tbutton->setIcon(ico);
tbutton->setText("系统帮助提示");
//调用setToolButtonStyle函数设置tbutton样式,设置文本在图标下方
tbutton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
//将tubbton添加到tbar里面
tbar->addWidget(tbutton);
}
单选按钮Radio Button
源文件
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setGeometry(300,150,500,300);
QRadioButton * radb1= new QRadioButton(this);
QRadioButton * radb2= new QRadioButton(this);
radb1->setGeometry(20,20,150,40);
radb2->setGeometry(20,80,150,40);
radb1->setText("选择按钮1");
radb2->setText("选择按钮2");
//设置默认值Checked false true
radb1->setChecked(true);
radb2->setChecked(false);
}
复选框按钮Check Box
头文件
源文件
#include <QCheckBox>
#include <QRadioButton>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setGeometry(400,300,500,300);
cb= new QCheckBox(this);
cb->setGeometry(30,50,250,50);
cb->setCheckState(Qt::Checked);
cb->setText("初始化状态:Check状态");
cb->setTristate();//开启三态模式:选中,半选择,未选择
connect(cb,SIGNAL(stateChanged(int)),this,SLOT(checkboxstate(int)));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::checkboxstate(int istate){
switch(istate)
{
case Qt::Checked:
cb->setText("选中状态");
break;
case Qt::Unchecked:
cb->setText("未选中状态");
break;
case Qt::PartiallyChecked:
cb->setText("半选中状态");
break;
default:
break;
}
}
命令链接按钮Command Link Button
头文件
源文件
#include <QDesktopServices>
#include <QUrl>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setGeometry(400,300,500,300);
clb=new QCommandLinkButton("testclb","clicked testclb",this);
clb->setGeometry(50,100,250,60);
connect(clb,SIGNAL(clicked()),this,SLOT(clbClicked()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::clbClicked(){
QDesktopServices::openUrl(QUrl("https://baidu.com"));
}
按钮盒Button Box
头文件
源文件
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setGeometry(400,300,500,300);
dbb=new QDialogButtonBox(this);
dbb->setGeometry(100,100,200,30);
//传统按钮创建方式
dbb->addButton(QDialogButtonBox::Cancel);
dbb->button(QDialogButtonBox::Cancel)->setText("取 消");
//这里是自定义按钮,传统按钮只有ok,open,save,canncel...可以查帮助手册
pb=new QPushButton("自定义");
//将pb添加到dbb,并且设定ButtonRole为ActionRole
dbb->addButton(pb,QDialogButtonBox::ActionRole);
connect(dbb,SIGNAL(clicked(QAbstractButton *)),this, SLOT(dbbpbClicked(QAbstractButton*)));
}
void MainWindow::dbbpbClicked(QAbstractButton *bt){
if(bt==dbb->button(QDialogButtonBox::Cancel)){
qDebug()<<"您已经点击【取消】按钮"<<Qt::endl;
}
else if(bt==pb){
qDebug()<<"您已经点击【自定义】按钮"<<Qt::endl;
}
}
组合框Group Box
1.先把组合框实例化
2.创建按钮(单选/多选)
3.创建布局模式,并把按钮全部添加进布局模式当中addWidget()
4.把组合框的布局设置为刚刚创建的布局模式setLayout()
#include "widget.h"
#include <QDebug>
#include <QPushButton>
#include <QGroupBox>
#include <QRadioButton>
#include <QVBoxLayout>
#include <QCheckBox>
#include <QMenu>
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);
gpb_4->setChecked(true);
QPushButton *pbtn_4=new QPushButton("PushButton4");
QPushButton *pbtn_5=new QPushButton("PushButton5");
pbtn_5->setChecked(true);
pbtn_5->setCheckable(true);
QPushButton *pbtn_6=new QPushButton("PushButton6");
//命令按钮添加子菜单
QMenu *mu=new QMenu(this);
mu->addAction("King");
mu->addAction("Darren");
mu->addAction("Mark");
mu->addAction("Vico");
pbtn_6->setMenu(mu);
QVBoxLayout *vbly4=new QVBoxLayout;
vbly4->addWidget(pbtn_4);
vbly4->addWidget(pbtn_5);
vbly4->addWidget(pbtn_6);
gpb_4->setLayout(vbly4);
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);
}
滚动区域Scroll Area
添加图片步骤:
1.把图片的文件夹复制到在项目目录下
2.在Qt中添加现有文件,选中图片文件夹
3.给文件夹加前缀,添加图片,保存
#include "widget.h"
#include <QApplication>
#include <QLabel>
#include <QScrollArea>
#include <QGridLayout>
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.resize(300,200);
/*
* QScrollArea当中有很多功能继承来自于QAbstractScrollArea
* 滚动条外观是否漂亮取决于当前滚动条策略
*/
//创建Qlabel用于显示图片
QLabel *qljpg=new QLabel;
//允许图片缩放以适应QLabel
qljpg->setScaledContents(true);
//加载图片
QImage imagejpg(":/images/2.png");
if (imagejpg.isNull()) {
qDebug() << "Failed to load image!";
} else {
qljpg->setPixmap(QPixmap::fromImage(imagejpg));
}
//创建滚动区域
QScrollArea *sArea=new QScrollArea;
//图片居中
//sArea->setAlignment(Qt::AlignCenter);
//根据窗口比例显示
//sArea->setWidgetResizable(true);
//设置水平滚动条始终显示。
sArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
//设置垂直滚动条始终隐藏
sArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
//把QLabel添加到滚动区域
sArea->setWidget(qljpg);
//创建布局并添加滚动区域
QGridLayout *glayout=new QGridLayout;
glayout->addWidget(sArea);
w.setLayout(glayout);
w.show();
return a.exec();
}
标签小部件Tab Widget
头文件
源文件
#include "widget.h"
#include<QTabWidget>
#include<QGridLayout>
#include<QLabel>
#include<QPushButton>
#include<QLineEdit>
#include<QMessageBox>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
this->setWindowTitle("标签小部件控件测试");
this->setGeometry(300,200,600,400);
tabWidgetUI=new QTabWidget(this);
tabWidgetUI->setGeometry(20,20,560,360);
tabWidgetUI->show();
bool m_showtabwidgetui1=true;
bool m_showtabwidgetui2=true;
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,2);
qwidget1->setLayout(glayout);
}
if(m_showtabwidgetui2)
{
QWidget *qwidget2=new QWidget();
tabWidgetUI->addTab(qwidget2,"性能");
}
}
void Widget::MsgCommit(){
QMessageBox::information(NULL,"testing","QMessageBox:命令按钮测试成功!",QMessageBox::Ok);
}
框架Frame
在ui界面中,设置两个frame_1和frame_2,设置为网格布局
源文件
#include <QFrame>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
setWindowTitle("Frame框架控件测试");
ui->frame_1->setStyleSheet("background-color:yellow");
ui->frame_2->setStyleSheet("background-color:green");
ui->frame_1->setLineWidth(1);
ui->frame_1->setMidLineWidth(1);
ui->frame_1->setFrameShape(QFrame::Box);
ui->frame_1->setFrameShadow(QFrame::Raised);
ui->frame_2->setLineWidth(0);
ui->frame_2->setMidLineWidth(1);
ui->frame_2->setFrameShape(QFrame::Box);
ui->frame_2->setFrameShadow(QFrame::Sunken);
}
停靠窗体部件Dock Widget
源文件
#include <QDockWidget>
#include<QLabel>
#include<QComboBox>
#include <QPushButton>
#include <QGridLayout>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QDockWidget *dw=new QDockWidget("停靠窗口部件测试",this);
QLabel *lab=new QLabel("学历层次");
QComboBox *cbx= new QComboBox();
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 *wgt=new QWidget();
wgt->setLayout(glayout);
dw->setWidget(wgt);
dw->setMaximumSize(300,300);
}
视图Items Views
清单视图List View
头文件
源文件
#include <QListView>
#include <QStringListModel>
#include <QMessageBox>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
resize(450,250);
listview1=new QListView(this);
listview1->setGeometry(20,20,240,160);
//初始化数据列表
QStringList qlist;
qlist.append("运动类:篮球、足球");
qlist.append("娱乐类:看电影、写小说、听音乐");
qlist.append("游戏类:五子棋、扑克牌、中国象棋");
qlist.append("旅游类:国外旅游、国内旅游");
//创建一个 QStringListModel 对象 listmode,用于管理 qlist 中的数据。
QStringListModel *listmode=new QStringListModel(qlist);
//将 listmode 设置为 listview1 的数据模型,以便在 QListView 中显示这些数据。
listview1->setModel(listmode);
connect(listview1,SIGNAL(clicked(const QModelIndex)),this,SLOT(SlotClickedFunc(const QModelIndex)));
}
Widget::~Widget() {
}
void Widget::SlotClickedFunc(const QModelIndex &index){
QMessageBox::information(NULL,"兴趣爱好","你选择的类型为:\n"+index.data().toString());
}
树视图Tree View
在ui中,添加TreeView视图
头文件
源文件
#include <QStandardItem>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
InitTreeViewFunc();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::InitTreeViewFunc()
{
//1.构造model
sItemMode=new QStandardItemModel(ui->treeView);
//等价于
//sItemMode = new QStandardItemModel(); // 1. 创建模型对象
ui->treeView->setModel(sItemMode); // 2. 将模型设置给视图
//
sItemMode->setHorizontalHeaderLabels(QStringList()<<QStringLiteral("编号")<<QStringLiteral("初中部|高中部"));
QList<QStandardItem*> item11;
QStandardItem *item1=new QStandardItem(QString::number(1));
QStandardItem *item2=new QStandardItem("初中部");
//创建一级节点,将它加入到sItemModel
item11.append(item1);
item11.append(item2);
sItemMode->appendRow(item11);
//二级节点,添加到第一个一级节点
QList<QStandardItem*> item112;
QStandardItem *item1121=new QStandardItem(QString::number(2));
QStandardItem *item1122=new QStandardItem(QStringLiteral("一年级"));
item112.append(item1121);
item112.append(item1122);
item1->appendRow(item112);
//三级节点,添加到第一个二级节点
QList<QStandardItem*> item1231;
QStandardItem *item12311=new QStandardItem(QString::number(3));
QStandardItem *item12312=new QStandardItem(QStringLiteral("一班"));
item1231.append(item12311);
item1231.append(item12312);
item1121->appendRow(item1231);
QList<QStandardItem*> item1232;
QStandardItem *item12321=new QStandardItem(QString::number(3));
QStandardItem *item12322=new QStandardItem(QStringLiteral("二班"));
item1232.append(item12321);
item1232.append(item12322);
item1121->appendRow(item1232);
QList<QStandardItem*> item21;
QStandardItem *item3=new QStandardItem(QString::number(1));
QStandardItem *item4=new QStandardItem("高中部");
//创建一级节点,将它加入到sItemModel
item21.append(item3);
item21.append(item4);
sItemMode->appendRow(item21);
ui->treeView->setModel(sItemMode);
}
表视图Table View
在ui 界面中,添加table view控件
头文件
源文件
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
InitTableViewFunc();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::InitTableViewFunc()
{
QStandardItemModel *stuMode=new QStandardItemModel();
stuMode->setHorizontalHeaderItem(0,new QStandardItem(QObject::tr("学号")));
stuMode->setHorizontalHeaderItem(1,new QStandardItem(QObject::tr("姓名")));
stuMode->setHorizontalHeaderItem(2,new QStandardItem(QObject::tr("性别")));
stuMode->setHorizontalHeaderItem(3,new QStandardItem(QObject::tr("分数")));
//通过API函数将数据模型绑定到QTableView
ui->tableView->setModel(stuMode);
//设置表格列的宽度
ui->tableView->setColumnWidth(0,120);
//2.添加数据信息
stuMode->setItem(0,0,new QStandardItem("2022001"));
stuMode->setItem(0,1,new QStandardItem("张三"));
stuMode->setItem(0,2,new QStandardItem("男"));
stuMode->setItem(0,3,new QStandardItem("714"));
stuMode->setItem(1,0,new QStandardItem("2022002"));
stuMode->setItem(1,1,new QStandardItem("小花"));
stuMode->setItem(1,2,new QStandardItem("女"));
stuMode->setItem(1,3,new QStandardItem("754"));
stuMode->setItem(2,0,new QStandardItem("2022003"));
stuMode->setItem(2,1,new QStandardItem("李三"));
stuMode->setItem(2,2,new QStandardItem("男"));
stuMode->setItem(2,3,new QStandardItem("765"));
}
ListWidget
在ui文件创建listWidget
源文件
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QListWidgetItem *qitem=new QListWidgetItem("沁园春-雪");
ui->listWidget->addItem(qitem);
qitem->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
QStringList slist;
slist<<"1:北国风光,千里冰封,万里雪飘";
slist<<"2:望长城内外...";
ui->listWidget->addItems(slist);
}
TreeWidget
源文件
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//添加第一级节点
QTreeWidgetItem*topItem1=new QTreeWidgetItem(ui->treeWidget);
topItem1->setText(0,"清华大学");
ui->treeWidget->addTopLevelItem(topItem1);
//隐藏表头
ui->treeWidget->setHeaderHidden(true);
//展开节点
ui->treeWidget->expandAll();
//二级节点添加到一级节点的topItem1
QTreeWidgetItem *item11=new QTreeWidgetItem(topItem1);
item11->setText(0,"清华大学建筑学院");
item11->setCheckState(0,Qt::Checked);
QTreeWidgetItem *item12=new QTreeWidgetItem(topItem1);
item12->setText(0,"清华大学土木学院");
item12->setCheckState(0,Qt::Checked);
QTreeWidgetItem*topItem2=new QTreeWidgetItem(ui->treeWidget);
topItem2->setText(0,"北京大学");
ui->treeWidget->addTopLevelItem(topItem2);
ui->treeWidget->setHeaderHidden(true);
ui->treeWidget->expandAll();
QTreeWidgetItem *item21=new QTreeWidgetItem(topItem2);
item21->setText(0,"北京大学文学院");
item21->setCheckState(0,Qt::Checked);
}
TabelWidget
源文件
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
ui->tableWidget->setRowCount(3);
ui->tableWidget->setColumnCount(2);
QStringList slist;
slist<<"学号"<<"高考分数";
ui->tableWidget->setHorizontalHeaderLabels(slist);
QList<QString> strno;
strno<<"202201"<<"202202"<<"202203";
QList<QString> strscore;
strscore<<"708"<<"712"<<"690";
for(int i=0;i<3;i++){
int iCol=0;
QTableWidgetItem *pitem = new QTableWidgetItem(strno.at(i));
ui->tableWidget->setItem(i,iCol++,pitem);
ui->tableWidget->setItem(i,iCol,new QTableWidgetItem(strscore.at(i)));
}
}
Input Widget
Combo Box
头文件
源文件
#include <QMessageBox>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//设置主空格的显示位置及大小
this->setGeometry(300,200,1000,600);
combobox=new QComboBox(this);
combobox->setGeometry(10,10,200,30);
combobox->addItem("北京市");
combobox->addItem("上海市");
combobox->addItem("广东省");
connect(combobox,SIGNAL(currentIndexChanged(int)),this,SLOT(comboboxIndex(int)));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::comboboxIndex(int index){
qDebug()<<"你选择的区域是:"<<combobox->itemText(index)<<Qt::endl;
QMessageBox mybox(QMessageBox::Question,"信息",combobox->itemText(index),QMessageBox::Yes|QMessageBox::No);
mybox.exec();
}
Font Combo Box
源文件
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
fontcombobox=new QFontComboBox(this);
qlabels=new QLabel(this);
fontcombobox->setGeometry(10,50,200,30);
qlabels->setGeometry(10,70,300,50);
connect(fontcombobox,SIGNAL(currentFontChanged(QFont)),this,SLOT(fontComboboxFunc(QFont)));
}
void MainWindow::fontComboboxFunc(QFont font){
qlabels->setFont(font);
QString qStr="广东省广州市";
qlabels->setText(qStr);
}
头文件
Line Edit
头文件
源文件
#include <QMessageBox>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
lineedit=new QLineEdit(this);
lineedit->setGeometry(10,150,200,30);
pushbutton=new QPushButton(this);
pushbutton->setText("点击我");
qlabely=new QLabel(this);
qlabely->setGeometry(10,200,400,30);
qlabely->setText("你输入的内容为:");
connect(pushbutton,SIGNAL(clicked()),this,SLOT(pushbuttonclicked()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::pushbuttonclicked(){
QString qStr;
qStr="您输入的内容为:";
qStr=qStr+lineedit->text();
qlabely->setText(qStr);
lineedit->clear();
}
文本编辑框 Text Edit
头文件
源文件
#include <QDir>
#include <QTextStream>
#include <QCoreApplication>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
plaintedit=new QPlainTextEdit(this);
plaintedit->setGeometry(10,250,400,200);
radiobutton=new QRadioButton(this);
radiobutton->setGeometry(260,220,200,30);
radiobutton->setText("只读模式");
QDir::setCurrent(QCoreApplication::applicationDirPath());
QFile fe("moc_mainwindow.cpp");
fe.open(QFile::ReadOnly|QFile::Text);
//加载到文件流
QTextStream strin(&fe);
plaintedit->insertPlainText(strin.readAll());
connect(radiobutton,SIGNAL(clicked()),this,SLOT(radioButtonClicked()));
}
void MainWindow::radioButtonClicked()
{
if(radiobutton->isChecked()){
plaintedit->setReadOnly(true);
}else{
plaintedit->setReadOnly(false);
}
}
Spin Box
头文件
源文件
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//改变窗口背景颜色
this->setStyleSheet("QMainWindow{background-color:""rgba(250,220,120,100%))}");
spinbox=new QSpinBox(this);
spinbox->setGeometry(440,250,150,30);
spinbox->setRange(0,100);
spinbox->setSingleStep(10);
spinbox->setValue(100);
spinbox->setSuffix("%不透明度");
connect(spinbox,SIGNAL(valueChanged(int)),this,SLOT(spinboxValueChanged(int)));
}
void MainWindow::spinboxValueChanged(int x)
{
double dx=(double)x/100;
this->setWindowOpacity(dx);
}
Date/Time Edit
头文件
源文件
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
dte=new QDateTimeEdit(QDateTime::currentDateTime(),this);
dte->setGeometry(440,290,220,30);
te=new QTimeEdit(QTime::currentTime(),this);
te->setGeometry(440,330,200,30);
de=new QDateEdit(QDate::currentDate(),this);
de->setGeometry(440,370,200,30);
}
Progress Bar
头文件
源文件
hscrollbar=new QScrollBar(Qt::Horizontal,this);
hscrollbar->setGeometry(0,500,1000,30);
vscrollbar=new QScrollBar(Qt::Vertical,this);
vscrollbar->setGeometry(570,0,30,500);
Key Sequence Edit
头文件
源文件
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
kse=new QKeySequenceEdit(this);
kse->setGeometry(200,230,200,30);
connect(kse,SIGNAL(keySequenceChanged(const QKeySequence &)),this,
SLOT(keyseqeditChanged(const QKeySequence &)));
}
void MainWindow::keyseqeditChanged(const QKeySequence &key){
if(key==QKeySequence(tr("Ctrl+Q")))
this->close();
else
qDebug()<<key.toString()<<Qt::endl;
}
Display Widgets
Label
在ui中添加Label,更名为labeljpg
头文件
源文件
#include <QMessageBox>
#include <QImage>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
textlabelFunc();
}
void Widget::textlabelFunc(){
QString fName("C:\\Users\\Gemini\\Desktop\\1.jpg");
QImage *qimg=new QImage;
if(!(qimg->load(fName)))
{
QMessageBox::information(this,"失败","加载jpg图片失败,请重新检查");
delete qimg;
return;
}
ui->labeljpg->setPixmap(QPixmap::fromImage(*qimg));
}
Text Browser
在ui界面中添加textBrowser
头文件
源文件
#include <QFile>
#include <QString>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
textbrowserFuncReadTxt();
}
void Widget::textbrowserFuncReadTxt(){
QString qStrdData;
QFile qfile("C:\\Users\\Gemini\\Desktop\\1.txt");
if(!(qfile.open(QIODevice::ReadOnly|QIODevice::Text)))
{
QMessageBox::warning(this,"失败","打开文件失败,请重新检查");
}
while(!qfile.atEnd()){
QByteArray ay=qfile.readLine();
QString strs(ay);
qStrdData.append(strs);
}
ui->textBrowser->setText(qStrdData);
}
Progress Bar
在ui中添加progress Bar进度条按钮,并且可以右键按钮提升为槽。这是系统会自动创建隐性的信号与槽机制,不需要再写connect()
头文件
源文件
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
ui->progressBar->setRange(0,1000000);
ui->progressBar->setValue(0);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
for(int i=1;i<=1000000;i++){
for(int j=0;j<1;j++){
ui->progressBar->setValue(i);
}
}
}
LCD N
在ui界面中添加LCD Number和三个按钮,命名如下。并把三个按钮都右键添加槽函数
头文件
源文件
#include <QTimer>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
InitFunc();
connect(timers,&QTimer::timeout,this,&Widget::on_timerout);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushbtnstart_clicked()
{
timers->start();
ui->pushbtnstart->setEnabled(false);
ui->pushbtnpause->setEnabled(true);
ui->pushbtnreset->setEnabled(true);
}
void Widget::on_pushbtnpause_clicked()
{
timers->stop();
ui->pushbtnstart->setEnabled(true);
ui->pushbtnpause->setEnabled(false);
ui->pushbtnreset->setEnabled(true);
}
void Widget::on_pushbtnreset_clicked()
{
timers->stop();
iValues=0;
ui->pushbtn->display(iValues);
ui->pushbtnstart->setEnabled(true);
ui->pushbtnpause->setEnabled(true);
ui->pushbtnreset->setEnabled(false);
}
void Widget::InitFunc(){
timers=new QTimer(this);
timers->setInterval(1000);//定时周期为1s
timers->stop();
}
void Widget::on_timerout(){
iValues++;
ui->pushbtn->display(iValues);
}