目录

  • 基本窗口类 QWidget
    • 窗体几何位置相关方法
      • 获取窗体位置、大小的方法
      • 设置窗体位置、大小的方法
    • 窗体控件类概览
    • 控件定义代码规范
  • 标签 QLabel
  • 按钮 QPushButton
  • 组合框 QComboBox
  • 列表框 QListWidget
  • 单行编辑框 QLineEdit
  • 滑动条 QSlider
  • QToolBox (实现抽屉效果)
  • 选项卡控件 QTabWidget
  • 表格控件 QTableWidget QTableView
    • 创建方法
    • 控制方式
  • 富文本控件 QTextEdit

基本窗口类 QWidget

QWidget是所有窗体部件的基类,因此其方法也被继承到其他所有窗体部件中

窗体几何位置相关方法

获取窗体位置、大小的方法

设置窗体位置、大小的方法

方法 功能
move(0,0) 移动窗体到某位置
resize(400,300); 设置窗体大小
setGeometry(0,0,220,150) 设置窗体位置(绝对定位),传入左上点的横坐标、纵坐标,右下点的横坐标、纵坐标
setMaximumSize(400,400); 设置最大尺寸
setMinimumSize(300,300); 设置最小尺寸

窗体控件类概览




控件定义代码规范

所有控件定义都需要同时在 .h 头文件内声明和对应 .cpp 文件内实现
.h 头文件内包含某个界面对象的声明,声明内部包含其所有控件、槽函数的声明,且所有控件要有include导入,例如

#include <QDialog>
#include <QXxxxxx>        //添加头文件
class Dialog : public QDialog{Q_OBJECT
public:Dialog(QWidget  *parent = 0);~Dialog();
public slots:void onChanged(int index); //定义槽函数
private:QXxxxxx *xxxxxx;        //定义控件指针
};

.cpp 文件内包含对应界面对象的创建,内部控件对象的创建和所有方法的调用。其中控件的创建要用 new 关键字,传入 this 指针创建。此外 connect 语句、槽函数等也需要在此实现。例如

#include <QMessageBox>Dialog::Dialog(QWidget *parent)  :  QDialog(parent)
{xxxxxx = new QXxxxxx(this);  //创建组合框xxxxxx->setGeometry(20,20,100, 30);xxxxxx->xxXxx();connect(A,SIGNAL(fxxx_signal(int)),this, SLOT(onChanged(int)));this->resize(200, 200);this->setWindowTitle("XX");
}
void Dialog::onChanged(int index) {QMessageBox::warning(this, "消息", comBox-> itemText(index) ,   QMessageBox::Ok);
}

标签 QLabel

//定义
QLabel *label=new QLabel(this);
//设定位置
label->setGeometry(10,10,150,80);
//设置文字
label->setText("Label");
//设置文本对其方式。多个参数用“|”分割
label->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
参数名 对齐方式
AlignTop 将文本添加到对象的上部
AlignButtom 将文本添加到对象的下部
AlignLeft 沿着对象的左边添加文本
AlignRight 沿着对象的右边添加文本
AlignHCenter 将文本添加到对象水平中心的位置
AlignVCenter 将文本添加到对象的垂直中心位置
AlignCenter 将文本添加到对象的中心位置

QLabel对象中也可以设置图片,方法如下

QLabel *pTag = new  QLabel(&w);   //创建标签
QImage image("G:/workspace2020/QT/4_2/nuist.jpeg");    //创建image对象
pTag->setPixmap(QPixmap::fromImage(image));
pTag->setGeometry(0,0,image.width(),image.height());

按钮 QPushButton

Dialog::Dialog(QWidget *parent)  : QDialog(parent)
{resize(400,300);       //设置主窗体大小pushButton = new QPushButton(this);  //新建按钮QIcon icon(":/rc/play.png"); //定义图标对象pushButton->setIcon(icon);   //设置按钮的图标pushButton->setGeometry(20, 20, 70, 40);pushButton->setFlat(true);   //设置为平面显示(背景透明)pushButton->setText("Open");  //设置按钮文本信息//pushButton->setText("我是一个很长很长很长的文本");// adjustSize():自动调整控件的大小,以适应其内容;ui->pushButton->adjustSize();//设置在控件上按下 回车键 时,响应控件的 click 事件pushButton->setDefault(true);
}

组合框 QComboBox

组合框即一个下拉选择菜单,有如下常用方法

comBox = new QComboBox(this);  //创建组合框
comBox->setGeometry(20,20,100, 30);
//常用设置方法
QIcon icon1(":/ftp.png");
comBox->addItem(icon1, "ftp");   //设置图标和文字
QIcon icon2(":/www.png");
comBox->addItem("www");            //设置文字
comBox->setItemIcon(1, icon2);    //设置图标
//常用调用方法
comBox-> itemText(index)         //获取当前选项文字

列表框 QListWidget

列表框即无需下拉直接显示全部选项的组合框
列表框添加选项需在 addItem 方法中传入 QListWidgetItem 对象指针
QListWidgetItem 传入 QIcon 对象和包含在 tr 内的字符串

list = new QListWidget(this);   //创建列表框
list->addItem(new QListWidgetItem(QIcon(":/images/line.png"), tr("Line")));

单行编辑框 QLineEdit

lineEdit = new QLineEdit(this);
lineEdit->setReadOnly(true);    //设为只读
lineEdit->setEchoMode(QLineEdit::Password);    //设为加密显示
lineEdit->setEchoMode(QLineEdit::Normal);    //设为正常显示
lineEdit->text();    //获取编辑框内容

滑动条 QSlider

slider = new QSlider(Qt::Horizontal, this);  //水平方向滑动
slider->setMinimum(0);       //设置滑动条的最小值
slider->setMaximum(300);     //设置滑动条的最大值
slider->setValue(50);        //设置滑动条当前值
slider->update();
//值改变对应信号为
valueChanged(int)    //发送的值为滑动条改变后的值

QToolBox (实现抽屉效果)

抽屉效果即有若干条目并列显示,点击一个条目就将该条目下项目展开,同时其他条目下项目隐藏,如图

toolBox = new QToolBox(this);    //新建QToolBox
//新建一个QWidget 添加到QToolBox中
QWidget *widget = new QWidget(toolBox);
//创建QWidget内下的项目
QPushButton *button1 = new QPushButton(iconf1,"Wind",widget);
QPushButton *button2 = new QPushButton(iconf2, "Cake",widget);
//向QToolBox中添加第一个抽屉,名字为Friend
toolBox->addItem(widget, "Friend");
toolBox->setItemIcon(0, iconFriend);   //设置第一个图标

选项卡控件 QTabWidget

QTabWidget用于实现多页面切换效果

tabWidget = new QTabWidget(this);      //新建第一个页面的部件
//省略新建每个页面部件的步骤
//向QTabWidget中添加第一个页面
tabWidget->addTab(widget, "Tab1");
//向QTabWidget中添加第二个页面
tabWidget->addTab(label,  "Tab2");
//向QTabWidget中添加第三个页面
tabWidget->addTab( pushButton3,  "Tab3");
tabWidget->setGeometry(0,0,220,150);
this->resize(220, 150);

可以看出,只要是QWidget及其子类都可以添加到选项卡控件中。

表格控件 QTableWidget QTableView

  • QTableWidget是QTableView的子类。
  • 这两者主要的区别是QTableView可以使用自定义的数据模型来显示内容。
  • 而QTableWidget则只能使用标准的数据模型,并且其单元格数据是QTableWidgetItem的对象来实现。

创建方法

// 构造了一个表格对象,设置为10行,5列
QTableWidget *tableWidget = new QTableWidget(10,5,this);tableWidget->setWindowTitle("QTableWidget & Item");
tableWidget->resize(350, 200);  //设置表格// 添加表头
QStringList header;
header<<"Month"<<"Name"<<"Description";
tableWidget->setHorizontalHeaderLabels(header);// 添加第1列(从0开始计数)
tableWidget->setItem(0,0,new QTableWidgetItem("Jan"));
tableWidget->setItem(1,0,new QTableWidgetItem("Feb"));
tableWidget->setItem(2,0,new QTableWidgetItem("Mar"));
// 添加第2列
tableWidget->setItem(0,1,new  QTableWidgetItem(QIcon(":/rar.png"), "File1"));
tableWidget->setItem(1,1,new QTableWidgetItem(QIcon(":/rar.png"), "File2"));
tableWidget->setItem(2,1,new QTableWidgetItem(QIcon(":/rar.png"), "File3"));
tableWidget->show();/***************************************/
tableWidget->setRowCount(10);     //设置行数为10
tableWidget->setColumnCount(5);   //设置列数为5//删除编号为row(从0开始)的行
tableWidget->removeRow(row);
//删除编号为col(从0开始)的列
tableWidget->removeColumn(col);

控制方式

设置表格编辑许可用以下语句

tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);

可选的参数为:

参数 数值 含义
QAbstractItemView::NoEditTriggers 0 不能对表格内容进行修改
QAbstractItemView::CurrentChanged 1 任何时候都能对单元格修改
QAbstractItemView::DoubleClicked 2 双击单元格后开始修改
QAbstractItemView::SelectedClicked 4 单击已选中的内容后可修改

设置表格为整行 (列) 选择可用以下语句

tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);

可选的参数为:

参数 数值 含义
QAbstractItemView::SelectItems 0 选中单个单元格
QAbstractItemView::SelectRows 1 选中一行
QAbstractItemView::SelectColumns 2 选中一列

富文本控件 QTextEdit

可以额外添加按钮来改变文本框中部分文字的字体、大小、颜色等
由于比较复杂,就不理解了

#include <QWidget>
#include <QPushButton>
#include <QTextEdit>
class Widget : public QWidget
{Q_OBJECT// 添加按钮和文本框控件的定义QPushButton *colorButton;QPushButton *fontButton;QTextEdit *edit;public:Widget(QWidget *parent = 0);~Widget();public slots:       //添加槽函数定义void clickedColorButton();void clickedFontButton();
};
#include <QColorDialog>
#include <QFontDialog>
#include "widget.h"Widget::Widget(QWidget *parent)    : QWidget(parent)
{  colorButton = new QPushButton("color",this);fontButton = new QPushButton("font",this);;edit = new QTextEdit(this);colorButton->setGeometry(30,30,80,30);fontButton->setGeometry(120,30,80,30);edit->setGeometry(30,80,220,150);// 建立关联connect(colorButton, SIGNAL(clicked()),  this, SLOT(clickedColorButton()));connect(fontButton, SIGNAL(clicked()),  this,SLOT(clickedFontButton()));
}
void Widget::clickedColorButton()
{QColorDialog *colorDialog = new QColorDialog(this);colorDialog->setCurrentColor( QColor(Qt::black) );if(QDialog::Accepted == colorDialog->exec())edit->setTextColor(colorDialog->currentColor());
}
void Widget::clickedFontButton()
{QFontDialog *fontDialog = new QFontDialog(this);fontDialog->setCurrentFont(edit->font());if(QDialog::Accepted == fontDialog->exec())edit->setCurrentFont(fontDialog->currentFont());
}

C++ QT笔记_2相关推荐

  1. 尚学堂JAVA基础学习笔记_2/2

    尚学堂JAVA基础学习笔记_2/2 文章目录 尚学堂JAVA基础学习笔记_2/2 写在前面 第10章 IO技术 1. IO入门 2. IO的API 3. 装饰流 4. IO实战 5. CommonsI ...

  2. 05黑马QT笔记之自定义槽函数

    05黑马QT笔记之自定义槽函数 1 自定义槽函数其实不难,没什么好说的,注意以下几点便可. 自定义参函数注意事项(Qt5): * 1)自定义槽函数可以是类成员函数(用得最多).全局普通函数.静态函数. ...

  3. 02黑马QT笔记之完全手写Hello World

    02黑马QT笔记之完全手写Hello World 1 步骤: 1 新建项目. 2 选择其他项目->空项目. 3 在空项目中添加QT +=widgets //代表使用窗口基类. 4 右击项目名字- ...

  4. Qt笔记(三十七)之解决QWebSocket收发中文乱码问题

    一.前言 之前介绍了基于QWebSocket实现的的服务端和客户端: Qt笔记(三十五)之QWebSocket简单使用(1)-实现服务端 Qt笔记(三十六)之QWebSocket简单使用(2)-实现客 ...

  5. QT笔记第0篇__Qt基本介绍

    QT笔记第0篇__Qt基本介绍 一.引言 二.Qt简介 三.特点: 四.相关网址 五.参考资料 一.引言 由于算法的实现过程中常常需要制作一些demo来进行功能展示,最开始打算用mfc,于是看了一段几 ...

  6. Qt笔记(五十四)之Activate控件开发

    一.Activate控件简介(内容摘自自百度) ActiveX控件是Microsoft的ActiveX技术的一部分.ActiveX控件是可以在应用程序和网络中计算机上重复使用的程序对象.创建它的主要技 ...

  7. Qt笔记-QTcpSocket跨线程调用(官方推荐方法,非百度烂大街方法)

    TCP服务端的经典案例中有个例子,就是当收到TCP客户端连接后,线程池直接开一个线程然后把这个socket指针传到线程里面,依靠新开的线程进程业务处理. 但在Qt里面使用这个方式后,会报一个QTcpS ...

  8. Android|Qt笔记-某App注册机思路总结

    现在是2021-08-01 23:20:44,目前这篇博文还在笔记里面,估计发布到网上已经是1个月后了. 目前写了一个App的注册机: 这里是单线程的,差不多30-50s可以注册一个帐号. 这个程序不 ...

  9. c++QT笔记,windows毛玻璃窗口实现封装

    原创内容,转载请声明. 今天看到了一些辅助工具的窗口总是会有个毛玻璃效果,我就很好奇如何用c++如何编写那种窗口,就查阅了会儿资料,然后封装了毛玻璃的窗口类,本文主要用于笔记以后方便自己看,如果对你有 ...

最新文章

  1. java窗口如何写不能移动_[求助]请教高手,下面程序为何组件不能自由移动,百思不得其解!...
  2. stm32数据手册中文_浅聊STM32系统构架
  3. JVM技术周报第2期
  4. 微服务架构的常见问题
  5. jenkins修改pom文件_动手实践:美化 Jenkins 报告插件的用户界面
  6. ubuntu安装tensorflow-gpu 和pytorch
  7. python3.6安装dlib,一直不成功的解决办法
  8. Qt工作笔记-QGraphicsProxyWidget放自定义界面实现拖动
  9. PHP与Javascript的混合测试
  10. angular第六天
  11. 记录一下, 破解某搜题软件
  12. JITSI开源视频直播
  13. foxmail超大附件服务器文件怎么删,电脑中使用Foxmail发送超大附件的方法
  14. choco安装软件包指定版本
  15. 【每日蓝桥】15、一三年省赛Java组真题“错误票据”
  16. Unity - 画质设置
  17. 【经验分享】大学四年,自学编程要不要接外包?
  18. 高楼扔鸡蛋问题-经典动态规划
  19. C# 取高8位或低8位
  20. Typecho主题推荐

热门文章

  1. 网站设计流程是什么?这三方面要了解
  2. 超好看个人主页HTML引导页源码
  3. CCS6.13安装教程及安装包
  4. Linux 下 ffmpeg命令行将h264文件转yuv文件
  5. 博弈的意思_博弈是什么意思(博弈最通俗的解释)
  6. 阿里十年福报996最后被裁!
  7. 哈理工OJ 2111 Apple(简单模拟)
  8. 在GPU云服务器中部署Stable Diffusion web UI
  9. 【H5模板】【html模板】【源码】760个H5的模板源码,没有你要不到,只有你想不到
  10. 软件测试关于adb命令⼤全