目录
QTableWidget控件
代码
widget.cpp
结果
其他控件
stackWidget栈控件
下拉框
代码
widget.cpp
结果
自定义控件封装
代码
smallwidget.h
smallwidget.cpp
widget.cpp
结果
鼠标事件
代码
mylabel.h
mylabel.cpp
结果
QTableWidget控件
设置列数setColumnCount
添加水平头setHorizontalHeaderLabels
设置行数setRowCount
设置正文setItem(行号,列号,具体内容)
添加老六
删除老六
代码
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//QTableWidget控件使用
QStringList list;
list<<"姓名"<<"性别"<<"年龄";
//告诉控件,有多少列
ui->tableWidget->setColumnCount(list.size());
//设置水平头
ui->tableWidget->setHorizontalHeaderLabels(list);
//设置行数
ui->tableWidget->setRowCount(3);
//准备数据
QStringList nameList;
nameList<<"张三"<<"李四"<<"王五";
QList<QString> sexList;
sexList<<"男"<<"女"<<"男";
//设置正文
for (int i=0;i<3;i++) {
int j=0;
ui->tableWidget->setItem(i,j,new QTableWidgetItem(nameList[i]));
j++;
//添加性别
ui->tableWidget->setItem(i,j,new QTableWidgetItem(sexList.at(i)));
j++;
//添加年龄
//int转QString number
ui->tableWidget->setItem(i,j,new QTableWidgetItem(QString::number(i+20)));
}
//点击按钮,添加老六
connect(ui->btn_TianJia,&QPushButton::clicked,[=](){
//先判断有没有,有就不添加,没有就添加
bool flag=ui->tableWidget->findItems("老六",Qt::MatchExactly).empty();
if(flag){
ui->tableWidget->insertRow(0);
ui->tableWidget->setItem(0,0,new QTableWidgetItem("老六"));
ui->tableWidget->setItem(0,1,new QTableWidgetItem("男"));
ui->tableWidget->setItem(0,2,new QTableWidgetItem(QString::number(20)));
}
else{
QMessageBox::warning(this,"警告","老六有了!");
}
});
//点击按钮,删除老六
connect(ui->brn_ShanChu,&QPushButton::clicked,[=](){
//先判断有没有,有就删除,没有就不删除
bool flag=ui->tableWidget->findItems("老六",Qt::MatchExactly).empty();
if(flag){
QMessageBox::warning(this,"警告","老六没了!");
}
else{
//先找到老六所在行
int hang=ui->tableWidget->findItems("老六",Qt::MatchExactly).first()->row();
//找到行数,删除掉
ui->tableWidget->removeRow(hang);
}
});
}
Widget::~Widget()
{
delete ui;
}
结果
其他控件
stackWidget栈控件
设置当前索引setCurrentIndex(0)
下拉框
addItem
setCurrentText()
利用QLabel显示gif图片和普通图片。
代码
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QMovie>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//stackWidget
//设置默认选中第0项
ui->stackedWidget->setCurrentIndex(0);
connect(ui->btn_ScrollArea,&QPushButton::clicked,[=](){
ui->stackedWidget->setCurrentIndex(0);
});
connect(ui->btn_ToolBox,&QPushButton::clicked,[=](){
ui->stackedWidget->setCurrentIndex(1);
});
connect(ui->btn_TabWidget,&QPushButton::clicked,[=](){
ui->stackedWidget->setCurrentIndex(2);
});
//下拉框使用
ui->comboBox->addItem("兰博基尼");
ui->comboBox->addItem("法拉利");
ui->comboBox->addItem("迈凯伦");
//点击选择法拉利按钮
connect(ui->btn_XuanZe,&QPushButton::clicked,[=](){
ui->comboBox->setCurrentText("法拉利");
});
//利用QLabel显示图片
ui->tu_pian->setPixmap(QPixmap(":/TuPian/a1.png"));
//利用QLabel显示gif图片
QMovie *movie=new QMovie(":/TuPian/a3.gif");
ui->dong_tu->setMovie(movie);
//播放gif
movie->start();
}
Widget::~Widget()
{
delete ui;
}
结果
自定义控件封装
创建QT-设计师界面类
拖拽Widget 右键 提升为-类名写入-全局包含-添加-提升
QSpinBox移动Slider跟着移动
对外接口
代码
smallwidget.h
#ifndef SMALLWIDGET_H
#define SMALLWIDGET_H
#include <QWidget>
namespace Ui {
class SmallWidget;
}
class SmallWidget : public QWidget
{
Q_OBJECT
public:
explicit SmallWidget(QWidget *parent = nullptr);
~SmallWidget();
void setValue(int v);
int getValue();
private:
Ui::SmallWidget *ui;
};
#endif // SMALLWIDGET_H
smallwidget.cpp
#include "smallwidget.h"
#include "ui_smallwidget.h"
SmallWidget::SmallWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::SmallWidget)
{
ui->setupUi(this);
//QSpinBox移动 Slider跟着移动
void(QSpinBox::*signal)(int)=&QSpinBox::valueChanged;
connect(ui->spinBox,signal,ui->horizontalSlider,&QSlider::setValue);
//Sli移动 SpinBox跟着移动
connect(ui->horizontalSlider,&QSlider::valueChanged,ui->spinBox,&QSpinBox::setValue);
}
void SmallWidget::setValue(int v){
ui->spinBox->setValue(v);
}
int SmallWidget::getValue(){
return ui->spinBox->value();
}
SmallWidget::~SmallWidget()
{
delete ui;
}
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//点击设置到一半的位置
connect(ui->btnSet,&QPushButton::clicked,[=](){
ui->widget->setValue(50);
});
//点击获取,拿到当前值
connect(ui->btnGet,&QPushButton::clicked,[=](){
qDebug()<<"当前值为:"<<ui->widget->getValue();
});
}
Widget::~Widget()
{
delete ui;
}
结果
鼠标事件
鼠标进入enterEvent
鼠标离开leaveEvent
鼠标按下、释放、移动
通过ev获取到x、y
ev判断鼠标左右键
QString格式化字符串%1 %2
代码
mylabel.h
#ifndef MYLABEL_H
#define MYLABEL_H
#include <QLabel>
class MyLabel : public QLabel
{
Q_OBJECT
public:
explicit MyLabel(QWidget *parent = nullptr);
//捕获事件
//鼠标进入
void enterEvent(QEvent *);
//鼠标离开
void leaveEvent(QEvent *);
//鼠标按下
void mousePressEvent(QMouseEvent *ev);
//鼠标释放
void mouseReleaseEvent(QMouseEvent *ev);
//鼠标移动
void mouseMoveEvent(QMouseEvent *ev);
signals:
};
#endif // MYLABEL_H
mylabel.cpp
#include "mylabel.h"
#include <QDebug>
#include <QMouseEvent>
MyLabel::MyLabel(QWidget *parent) : QLabel(parent)
{
//设置鼠标追踪
this->setMouseTracking(true);
}
//鼠标进入
void MyLabel::enterEvent(QEvent *){
qDebug()<<"鼠标进入";
}
//鼠标离开
void MyLabel::leaveEvent(QEvent *){
qDebug()<<"鼠标离开";
}
//鼠标按下
void MyLabel::mousePressEvent(QMouseEvent *ev){
//如果鼠标按下的是左键,然后提示内容
if(ev->button()==Qt::LeftButton){
//找按下的位置
QString str=QString("鼠标按下 x=%1 y=%2").arg(ev->x()).arg(ev->y());
qDebug()<<str;
}
}
//鼠标释放
void MyLabel::mouseReleaseEvent(QMouseEvent *ev){
//如果鼠标按下的是左键,然后提示内容
if(ev->button()==Qt::LeftButton){
QString str=QString("鼠标释放 x=%1 y=%2").arg(ev->x()).arg(ev->y());
qDebug()<<str;
}
}
//鼠标移动
void MyLabel::mouseMoveEvent(QMouseEvent *ev){
//如果鼠标按下的是左键,然后提示内容,持续状态需要用buttons,用与操作符进行判断
//if(ev->buttons()&Qt::LeftButton){
QString str=QString("鼠标移动 x=%1 y=%2").arg(ev->x()).arg(ev->y());
qDebug()<<str;
//}
}