赞
踩
窗口分为三种:普通窗口、无边框窗口以及顶层窗口(顶层窗口永远在最上面)
- //普通窗口
- QWidget *widget = new QWidget(nullptr,Qt::Tool|Qt::WindowCloseButtonHint|Qt::WindowMaximizeButtonHint);
- widget->setWindowTitle(QStringLiteral("widget窗口"));
- widget->show();
-
- //无边框
- QWidget *widget1 = new QWidget(nullptr, Qt::FramelessWindowHint);
- widget1->show();
-
- //作为顶层窗口出现
- QWidget *widget2 = new QWidget(nullptr,Qt::Dialog| Qt::WindowStaysOnTopHint);
- widget2->setWindowTitle("top widget");
- widget2->show();
模态对话框:就是我们没有关闭它之前,不能再与同一个应用程序中的其他窗口进行交互(操作),例如vs中的新建项目窗口,若不关闭,无法进行编写代码的操作。要想使一个窗口为模态窗口,需要调用它的exec()方法显示窗口。
非模态对话框:关闭该对话框之前,还可以与应用程序中的其他窗口进行交互(操作),例如记事本中的查找窗口要想使一个窗口为非模块窗口的话,需要使用new操作符在堆上创建窗口对象,使用show()方法进行显示
-
- //模态对话框
- void Dialog04::on_modalButton_clicked()
- {
- QDialog dlg(this);
- dlg.resize(200, 200);
- dlg.exec();
- }
-
- //非模态对话框
- void Dialog04::on_noModalButton_clicked()
- {
- QDialog dlg1(this);
- dlg1.resize(200, 200);
- dlg1.show();
- }
MessageBox:有信息提示框、警告提示框、错误提示框、问题提示框、关于提示框
- //信息提示框
- QMessageBox::information(nullptr, QStringLiteral("提示信息"), QStringLiteral("这是信息提示窗口"), QMessageBox::Yes | QMessageBox::No);
-
- //警告提示框
- QMessageBox::warning(nullptr, QStringLiteral("警告信息"), QStringLiteral("程序警告信息"));
-
- //错误提示框
- QMessageBox::critical(nullptr, QStringLiteral("错误信息"), QStringLiteral("程序发生致命错误"));
-
- //问题提示框
- QMessageBox::question(nullptr, QStringLiteral("问题信息"), QStringLiteral("你是否关闭问题窗口"),QMessageBox::Yes | QMessageBox::No);
-
- //关于提示框
- QMessageBox::about(nullptr, QStringLiteral("关于"), QStringLiteral("关于应用程序"));//自定义
- QMessageBox::aboutQt(nullptr);//显示Qt文档
显示图标分别为:
QFileDialog :用于文件的读写
方式一:普通方法进行文件读取
- //参数1:父对象 参数2:窗口标题 参数3:指定默认打开路径 参数4:过滤器(过滤文件类型)
- QString strFileName = QFileDialog::getOpenFileName(this, QStringLiteral("打开文件对话框"), "D:\\",QStringLiteral("文本文件(*txt);;源文件(*cpp)"));
-
- //创建读写文件对象
- QFile file(strFileName);
- //以指定方式打开文件
- file.open(QIODevice::ReadOnly | QIODevice::Text);
-
- //读取文件所有内容
- QByteArray content = file.readAll();
-
- //信息框展示文件内容
- QMessageBox::information(nullptr, QStringLiteral("读取文件"), QString(content));
-
- //关闭
- file.close();
方式二:使用QTextStream流方法
- //参数1:父对象 参数2:窗口标题 参数3:指定默认打开路径 参数4:过滤器(过滤文件类型)
- QString strFileName = QFileDialog::getOpenFileName(this, QStringLiteral("打开文件对话框"), "D:\\",QStringLiteral("文本文件(*txt);;源文件(*cpp)"));
-
- //创建读写文件对象
- QTextStream stream(&file);
- //以指定方式打开文件
- file.open(QIODevice::ReadOnly | QIODevice::Text);
-
- //读取文件内容
- stream.read(1);//读取一个字符、
- //stream.seek(0);//移动光标到最开始
- //stream.readLine();//读取一行字符
- //stream.readAll();//读取全部字符
-
- //使用流将读取数据写入string
- QString string;
- stream >> string;
-
- //信息框展示文件内容
- QMessageBox::information(nullptr, QStringLiteral("读取文件"), string);
-
- //关闭
- file.close();
-
- //选择文件,用strFileName接收文件路径
- QString strFileName = QFileDialog::getSaveFileName(this, QStringLiteral("保存文件对话框"), "D:\\",
- QStringLiteral("文本文件(*.txt);;源文件(*.cpp)"));
- if (!strFileName.isEmpty()) {
- QFile file(strFileName);
- if (file.open(QIODevice::WriteOnly)) {
- QTextStream stream(&file);
- stream << "123456";//写入文件
- file.close();//关闭文件
- }
- else {
- //文件路径为空时的处理
- //qDebug() << "无法打开文件:" << strFileName;
- }
- }
QClolrDialog:使用Qt内置的颜色选择器
- //参数1:颜色窗口打开时默认选择的颜色,参数2:父对象,参数3:窗口标题 参数4:透明度调整
- //方式1
- QColor color = QColorDialog::getColor(Qt::red, this, QStringLiteral("选择颜色"),QColorDialog::ShowAlphaChannel);
- qDebug() << color;
-
- //打开颜色对话框方式2
- QColorDialog dialog(Qt::green, this);//创建颜色对话框
- dialog.exec();//显示颜色对话框
- QColor color = dialog.currentColor();//获取用户当前选择的颜色
- qDebug() << color;
QProgressDialog:慢动作进度反馈
Qt有提供写好的进度条:progressBar
- //进度对话框 参数1:进度条上的文本信息 参数二:取消按钮的文本 参数3:起始值 参数4:结束值 参数5:父对象
- QProgressDialog dialog(QStringLiteral("文件复制进度"), QStringLiteral("取消"), 0, 1000, this);
- //调整窗口尺寸
- dialog.resize(300, 40);
- //以下两句代码用于设置窗口为模态窗口,级别比exec()要低
- dialog.setWindowModality(Qt::WindowModal);
- dialog.show();
-
- //进度条的进度变化
- for (int i=0;i<= 1000;i++)
- {
- Sleep(5);
- //设置进度条上的文本变化值
- dialog.setValue(i);
- }
菜单栏:QMenuBar,菜单栏最多只能有一个,可以没有
菜单:QMenu:添加到菜单栏上的部件
菜单项:QAction:添加到菜单上的部件
- //创建菜单栏
- QMenuBar * bar = menuBar();
-
- //创建菜单
- QMenu *fileMenu = new QMenu(QStringLiteral("文件"));
-
- //把文件和编辑菜单添加到编辑栏上
- bar->addMenu(fileMenu);//方式一:先创建再添加
- bar->addMenu(QStringLiteral("编辑"));//直接添加
-
- //创建菜单项
- QAction *newAction = new QAction(QStringLiteral("新建"));
-
- //将菜单项添加到菜单上
- fileMenu->addAction(newAction);
- //添加一条分割线
- fileMenu->addSeparator();
- fileMenu->addAction(QStringLiteral("打开"));
-
- //将菜单栏添加到窗口menu
- this->setMenuBar(bar);
-
- //绑定操作信号
- connect(newAction, &QAction::triggered, this, &MainWindow05::myNewActionSlots);
QToolBa:可以设置是否浮动、是否移动及添加带图标按钮等
- //创建
- QToolBar *toolBar = new QToolBar(this);
-
- //添加到此窗口最上面
- this->addToolBar(Qt::TopToolBarArea, toolBar);
-
- //设置工具栏是否可浮动 false--不可浮动
- toolBar->setFloatable(true);
-
- //设置工具栏是否可移动
- toolBar->setMovable(true);
-
-
- //添加按钮
- QPushButton *btn = new QPushButton(QStringLiteral("新建"),this);
- toolBar->addWidget(btn);
-
- //添加两个action到工具栏上
- toolBar->addAction(findAction);
- toolBar->addAction(newAction);
-
- //添加分隔符
- toolBar->addSeparator();
-
- //工具栏ToolBar上添加QToolButton按钮
- //新建toolButton按钮
- QToolButton *toolButton = new QToolButton();
- toolButton->setIcon(QIcon(":/MainWindow05/image/56.png"));//设置图标地址
- toolButton->setText(QStringLiteral("帮助"));//设置图标名称
- toolButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);//设置图标格式:图标在文字上方
-
- //添加到菜单栏
- toolBar->addWidget(toolButton);
- //创建空的状态栏
- QStatusBar *statusBar = this->statusBar();
-
- ///将标签控件添加到状态栏
- QLabel *label = new QLabel(QStringLiteral("状态信息1"));
- statusBar->addWidget(label);
-
- //将按钮控件添加到状态栏
- QPushButton *btn1 = new QPushButton(QStringLiteral("状态栏按钮"), this);
- statusBar->addWidget(btn1);
-
- //将label2添加到状态栏最右侧
- QLabel *label2 = new QLabel(QStringLiteral("状态信息2"));
- statusBar->addPermanentWidget(label2);
- QDockWidget *dockWidget = new QDockWidget(QStringLiteral("停靠窗口1"));
- //QMainWindow中addDockWidget()添加停靠窗口到指定位置
- this->addDockWidget(Qt::BottomDockWidgetArea,dockWidget);
QPushButton(普通按钮):可以添加图标,还可以添加菜单及菜单项
QToolButton(工具按钮):主要用于QMainWindow的QToolBar中,可以设置图片和文本的相对位置,也可以只显示图标或文本
QRadioButton(单选按钮):主要用于从一组按钮中选择其中的某一个
QCheckBox(复选框):可以同时选择多项
QButtonGroup(按钮组):当有一组按钮可以共用一个槽函数时,可以再该槽函数中左判断逻辑,那么可以使用按钮组控件管理一组按钮。QPushButton、QToolButton、QRadioButton、QCheckBox都可以放到按钮组中管理
常用方法:
addButton()
button()
setExclusive()
buttonClicked()信号
- ui.closeButton->setIcon(QIcon(":/ButtonsWidget06/image/1.png"));
- //新建菜单
- QMenu * menu = new QMenu(this);
-
- //添加菜单项,(图标、文本、同时指定QAction的triggered信号对应的槽函数)
- menu->addAction(QIcon(":/ButtonsWidget06/image/2.png"), QStringLiteral("关闭文件"), this, SLOT(closeFileSlot()));
-
- ui.closeButton->setMenu(menu);
-
- //设置两个单选按钮都不选中
- //Checkable和Checked需要同时使用
- ui.femaleButton->setCheckable(false);
- ui.femaleButton->setChecked(false);
-
- //禁止按钮,置灰,无法操作
- ui.femaleButton->setDisabled(false);
-
- //复选框开启三态
- //ui.paintCheckBox->setTristate(true);
- //connect(ui.paintCheckBox,&QCheckBox::stateChanged,this,&ButtonsWidget06::checkBoxStateChangeSlot);
-
- //创建按钮组对象
- m_pButtonGroup = new QButtonGroup(this);
-
- //同一组中内容只能选一个
- m_pButtonGroup->setExclusive(true);
- m_pButtonGroup->addButton(ui.paintCheckBox, 0);
- m_pButtonGroup->addButton(ui.writeCheckBox, 1);
- m_pButtonGroup->addButton(ui.ballCheckBox, 2);
-
- //connect绑定有重载时,推荐使用Qt写法
- //buttonGroupClickedSlot:根据传入id显示对应提示框
- connect(m_pButtonGroup,SIGNAL(buttonClicked(int)),this,SLOT(buttonGroupClickedSlot(int));
提供一个下拉列表供用户选择,也可以直接作为一个QLineEdit进行输入。QComoBox除了显示可见的下拉列表外,还可以每个项关联一个QVariant类型的变量,用于存储用户数据
QComoBox的常用方法:
addTtem()
addTtems()
添加到下拉列表中的项都有一个下标,currentIndex()获取当前选中项的下标
currentText() 获取当前选中项的文本
itemText(int index) 返回指定项的文本
count()返回下拉框中的总项数
- 方法一:单个添加
- ui.comboBox->addItem(QStringLiteral("陕西省"));
- ui.comboBox->addItem(QStringLiteral("山西省"));
- ui.comboBox->addItem(QStringLiteral("河南省"));
- //清空下拉框中的列表项
- ui.comboBox->clear();
-
- 方法二:批量添加
- QStringList strProvince;
- strProvince << QStringLiteral("新疆自治区") << QStringLiteral("宁夏自治区") << QStringLiteral("壮族自治区");
- ui.comboBox->addItems(strProvince);
- ui.comboBox->clear();
-
- 方法三:添加带图标项
- QIcon iconl(":/ButtonsWidget06/image/1.png");
- QIcon icon2;
- icon2.addFile(":/ButtonsWidget06/image/2.png");
- ui.comboBox->addItem(iconl, QStringLiteral("新疆自治区"));
- ui.comboBox->addItem(icon2, QStringLiteral("宁夏自治区"));
-
- 方法四:添加具有用户数据的数据项
- QMap<QString, int> cityZoneMap;
- cityZoneMap.insert(QStringLiteral("北京市"), 100);
- cityZoneMap.insert(QStringLiteral("天津市"), 200);
- cityZoneMap.insert(QStringLiteral("上海市"), 300);
- cityZoneMap.insert(QStringLiteral("重庆市"), 400);
- for each(const QString &key in cityZoneMap.keys()) {
- ui.comboBox->addItem(key, cityZoneMap.value(key));
- }
-
- //指定项设置图标
- ui.comboBox->setItemIcon(4, iconl);
fontComboBox:Qt uI 界面内下拉框,里面包含各种字体
QFontComboBox::AllFonts 显示所有字体
QFontComboBox::ScalableFonts 显示可缩放字体d
QFontComboBox::NonScalableFonts 显示不可缩放字体
QFontComboBox::MonospacedFonts 显示等宽字体
QFontComboBox::ProportionalFonts 显示比例字体
- ui.fontComboBox->setFontFilters(QFontComboBox::ScalableFonts);
-
- //进行字体设置:下拉框字体选择后
- void ButtonsWidget06::on_fontComboBox_currentFontChanged(const QFont & font)
- {
- ui.fontLabel->setFont(font);
- }
QLineEdit(行编辑器),是一个单行的文本编辑器,允许用户输入和编辑单行纯文本内容,而且它提供了复制、粘贴、撤销、剪切等功能。
1、显示模式:
Normal 正常模式
NoEcho 不显示模式
Password 密码模式
PasswordEchoOnEdit 输入时正常显示,失去输入焦点时显示为密码模式
2、焦点策略
Nofocus 控件不接受焦点
TabFocus 控件通过Tab按键接收焦点
ClickFocus 控件通过单击接收焦点
StrongFocus 控件通过Tab键和单击接收焦点
WheelFocus 控件通过鼠标滚轴
- ui.verifyLineEdit->setEchoMode(QLineEdit::Normal); //设置显示模式
- ui.verifyLineEdit->setFocusPolicy(Qt::StrongFocus); //设置焦点策略
- ui.verifyLineEdit->setMaxLength(10); //设置最大输入长度
- ui.verifyLineEdit->setPlaceholderText(QStringLiteral("请输入验证码"));//静态提示信息
-
- //QLineEdit输入内容的限制
- QIntValidator *pValid = new QIntValidator(100, 999, this);//创建整型效验器对象,参数1和参数2指定检查整数的范围
- ui.verifyLineEdit->setValidator(pValid);
正则表达式:
是一种文本模式,包含普通字符和特殊字符,它使用单个字符串来描述、匹配一系列满足某个语法规则的字符串,通常用来检索替换那些符合某个规则的文本。
正则表达式由表达式、量词和断言组成。最简单的一个表达式就是一个字符,例如x和5[ABC]可以匹配一个A或一个B或一个C,也可以简写成[A-C]
量词:一个量词指定了必须要匹配的表达式出现的次数,例如x{1,1}表示只能匹配一个x,前面的1表示最少包含一个x,后面的1表示最多包含1个x
断言:如果想匹配整个字符串,需要使用断言^和$,^表示从字符串的开始匹配,$表示一直匹配到末尾
例如:写一个正则表达式匹配到0-99之间的整数,靠头和结尾都是数字 ^[0-9]{1,2}$
[]表示范围(闭区间)
{}表示量词的最少和最多
()表示从几项里面选择一项,多项间用 | 分割表格1:正则表达式中的字符
一般可以使用一些特殊的符号表示常见的字符和常量
c字符本身 \c表示字符(a-z A-Z) \d表示数字
- //创建正则表达式
- QRegularExpression regl("[0-9.-]+");
-
- //创建正则表达式验证器对象
- QRegularExpressionValidator *pValidator = new QRegularExpressionValidator(this);
-
- //把验证器对象指定正则表达式
- pValidator->setRegularExpression(regl);
-
- //验证器对象设置给LineEdit控件
- ui.verifyLineEdit->setValidator(pValidator);
ui.passwordLineEdit->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);//水平垂直方向都居中
- QAction * userNameAction = new QAction(ui.userNameLineEdit);
- userNameAction->setIcon(icon2);//icon2地址
- ui.userNameLineEdit->addAction(userNameAction, QLineEdit::TrailingPosition);//tail
- //自动补全内容
- QStringList strList;
- strList << "Qt" << "Qt Assistant" << "Qt designer";
-
- //QCompleter:自动补全输入类
- QCompleter *com = new QCompleter(strList, this);
-
- //设置补全器大小写不敏感
- com->setCaseSensitivity(Qt::CaseInsensitive);
-
- //放入控件
- ui.userNameLineEdit->setCompleter(com);
1、editingFinished 当单行文本编辑器失去焦点时发出该信号
2、textChanged 当行文本编辑框中为文本发生变化时,发出该信号,它与textEdited的区别是,通过代码(setText())改变文本时也会发出该信号
3、textEdited当文本编辑器被编辑时发出该信号,通过代码(setText())编辑文本时不会发出该信号
QTextEdit:可以输入多行文本内容,可以显示图像、列表和表格等文本内容
常用方法:
1、设置文本 setPlainText() 设置文本前会将之前的文本内容清空
2、追加设置文本 insertPlainText()之前文本会保留
3、获取文本内容 toPlainText()
4、当文本内容较多时,可以自动出现水平或垂直滚动条
5、改变文本块控间的背景色,还可以添加背景图片
- QString strPath = "D:\\cccccc\\QtApp\\ButtonsWidget06\\image\\1.png";
- //获取TextEdit的调色板(可以改变控件的背景色或设置图片)
- QPalette pal = ui.textEdit->palette();
- //设置调色板画刷
- //创建Qpixmap对象,调整Qpixmap的大小
- pal.setBrush(QPalette::Base, QPixmap(strPath).scaled(ui.textEdit->size()));
- ui.textEdit->setAutoFillBackground(true);//允许用户设置背景
- //将调色板设置给TextEdit
- ui.textEdit->setPalette(pal);
-
- //设置文本
- void ButtonsWidget06::on_appendButton_clicked()
- {
- //setPlainText() 每次设置,之前文本都会清空
- //insertPlainText() 尾部追加
- ui.textEdit->insertPlainText(QStringLiteral("红红火火恍恍惚惚哈哈哈哈哈哈哈哈哈"));
- }
-
- //获取文本
- void ButtonsWidget06::on_getButton_clicked()
- {
- QString strText = ui.textEdit->toPlainText();
- QMessageBox::information(nullptr, "text", strText);
- }
-
- void ButtonsWidget06::on_textEdit_textChanged()
- {
- //移动光标:每次插入文本后,自动将光标移动到末尾
- ui.textEdit->moveCursor(QTextCursor::End);
- }
QDateEdit、QTimeEdit、QDateTimeEdit
1、日期时间对象和字符类型的转换
2、信号:dateChanged(const QDate &date)、 dateTimeChanged(const QDateTime &datetime) 、timeChanged(const QTime &time)当日期时间发生改变时发射该信号
editingFinished 当控件失去焦点时发射信息
- //设置时间
- void ButtonsWidget06::on_timeButton_clicked()
- {
- QString timeStr = ui.timeLineEdit->text();
- //去除字符串两边空格
- timeStr.trimmed();
- //字符串转为时间格式,赋值给timeEdit
- ui.timeEdit->setTime(QTime::fromString(timeStr, "HH:mm:ss"));
- }
-
- //设置日期
- void ButtonsWidget06::on_dateButton_clicked()
- {
- QString dateStr = ui.dateLineEdit->text();
- //去除字符串两边空格
- dateStr.trimmed();
- //字符串转为时间格式,赋值给timeEdit
- ui.dateEdit->setDate(QDate::fromString(dateStr, "yyyy/MM/dd"));
- }
-
- //设置时间日期
- void ButtonsWidget06::on_dateTimeButton_clicked()
- {
- QString dateTimeStr = ui.dateTimeLineEdit->text();
- //去除字符串两边空格
- dateTimeStr.trimmed();
- //字符串转为时间格式,赋值给timeEdit
- ui.dateTimeEdit->setDateTime(QDateTime::fromString(dateTimeStr, "yyyy/MM/dd HH:mm:ss"));
- }
-
- //获取时间日期
- void ButtonsWidget06::on_getDateTimeButton_clicked()
- {
- //获取系统当前日期和时间
- QDateTime dateTime = QDateTime::currentDateTime();
-
- //设置时间
- //将时间对象设置到timeEdit上面
- ui.timeEdit->setTime(dateTime.time());
- //将时间对象转为字符串设置到QLineEdit上面
- ui.timeLineEdit->setText(dateTime.time().toString("HH:mm:ss"));
-
- //设置日期
- ui.dateEdit->setDate(dateTime.date());
- ui.dateLineEdit->setText(dateTime.date().toString("yyyy/MM/dd"));
-
- //设置日期时间
- ui.dateTimeEdit->setDateTime(dateTime);
- ui.dateTimeLineEdit->setText(dateTime.toString("yyyy/MM/dd HH:mm:ss"));
- }
-
- //日期控件显示默认日历
- ui.dateEdit->setCalendarPopup(true);
- ui.dateTimeEdit->setCalendarPopup(true);
QScrollBark,一般不单独使用,常配合容器类控件一块使用
QSlider:
滑动条提供了水平和竖直两种,他是用于控制有界值的典型控件,它允许用户沿着在水平或竖直方向移动滑块,并将滑块所在的位置转换成一个合法范围的数值。
常用函数:
1、setRange() 用来设置滑动条的范围
2、setValue() 可以设置滑块的当前值
3、setMinimum 和setMaxImum()
4、setTickPostion() 设置刻度在滑动条的上方还是下方
5、setTickInterval()设置刻度间隔
- ui.horizontalSlider->setRange(0, 299);//设置范围
- ui.horizontalSlider->setTickPosition(QSlider::TicksAbove);//保存刻度位置
- ui.horizontalSlider->setTickInterval(30);//设置间隔
- ui.horizontalSlider->setValue(0);//设置默认值
练习:用滑块控制颜色,用QSpinBox控制红色滑动条
- //设置滑动块范围
- ui.horizontalSliderRed->setRange(0, 255);
- ui.horizontalSliderGreen->setRange(0, 255);
- ui.horizontalSliderBlue->setRange(0, 255);
- //设置初始值
- ui.horizontalSliderRed->setValue(0);
- ui.horizontalSliderGreen->setValue(0);
- ui.horizontalSliderBlue->setValue(0);
- //设置间隔
- ui.horizontalSliderRed->setTickInterval(5);
- ui.horizontalSliderGreen->setTickInterval(5);
- ui.horizontalSliderBlue->setTickInterval(5);
- //关联滑动条
- connect(ui.horizontalSliderRed, &QSlider::valueChanged, this, &ScrollControlWidget::colorSliderValueChangeSlot);
- connect(ui.horizontalSliderGreen, &QSlider::valueChanged, this, &ScrollControlWidget::colorSliderValueChangeSlot);
- connect(ui.horizontalSliderBlue, &QSlider::valueChanged, this, &ScrollControlWidget::colorSliderValueChangeSlot);
-
- void ScrollControlWidget::colorSliderValueChangeSlot()
- {
- int nRel = ui.horizontalSliderRed->value();
- int nGreen = ui.horizontalSliderGreen->value();
- int nBule = ui.horizontalSliderBlue->value();
- //创建颜色对象
- QColor color(nRel, nGreen, nBule);
- //获取调色板
- QPalette pal = ui.textEdit->palette();
- //设置颜色
- pal.setColor(QPalette::Base, color);
- //调色板颜色赋值给QtextEdit
- ui.textEdit->setPalette(pal);
- }
QSpinBox:
1、setSingLeStep 改变间隔
2、其他方法与QSlider方法名相同
3、信号:valueChanged(int)或 valueChanged(QString)
- //将QSpinBox的范围设置为0-255,在其valueChange信号对应的槽函数中,获取界面值,设置到红色滑动条上
- ui.spinBox->setRange(0, 255);
- //ui.spinBox->setMaximum(100);//默认最大值
- //ui.spinBox->setMinimum(100);//默认最小值
- ui.spinBox->setSingleStep(20);
QLabel:用于显示文本或图片,适合显示信息量较小的内容,不能和用户进行交互操作
- ui.textLabel->setAlignment(Qt::AlignTop | Qt::AlignVCenter);//设置文本对齐方式
- ui.textLabel->setText(QStringLiteral("通常用于显示文本或图片,适合显示信息量较小的内容,不能和用户进行交互操作"));//设置label上的文本内容
- ui.textLabel->setWordWrap(true);//设置换行
- ui.textLabel->setFrameShape(QFrame::Box);
- ui.textLabel->setToolTip("wwwwwww");
- //参数1:字体组名称 参数2:字体大小 参数3:字体粗细
- QFont font("Microsoft YaHei", 12, 20);
- ui.textLabel->setFont(font);
- //创建QMovie对象
- QMovie *pMovie = new QMovie(":/ButtonsWidget06/image/findelement.gif");
- ui.movieLabel->resize(400, 200);//图片大小
- ui.movieLabel->setScaledContents(true);//图片自适应
- ui.movieLabel->setMovie(pMovie);//设置动图
- pMovie->start();//开始播放
- QPixmap image;
- image.load(":/ButtonsWidget06/image/pic3.jpg");//设置图片路径
- ui.ImageLabel->setPixmap(image);//添加图片
- ui.ImageLabel->setScaledContents(true);//设置图片自适应
- ui.progressBar->setMinimum(0);
- ui.progressBar->setMaximum(0);
容器类控件:可以放置其他控件的控件
1、分组框QGroupBox:通常带有一个边框和标题栏,作为容器部件来使用,在其中可以放各种窗口部件
2、QScrollArea自动滚动区
它使一个容器控件,其中可以放置各种控件,当控件超出其显示范围时,可以通过滚动条来查看子控件。注意:外面控件的大小小于里面控件的大小才会出现滚动条
3、QToolBox选项卡控件(抽屉控件)
它有一组选项卡,每个选项卡下有一个Qwidget控件,我们将子控件放到Qwidget上面
每一个page都有一个索引位置下标,下标从0开始,多个page有顺序的,默认按照添加顺序排布
每个page都有ItemText,还可以设置ItemIcon、itemToolTip等
常用方法:
1、setItemText()设置选项卡的文本
2、setItemIcon()设置图标
3、count()获取数目:有几个page
4、setItemEnbled()将某个选项卡禁能
5、addItem()添加选项卡
- //QToolBox
- int count = ui.toolBox->count();
- qDebug() << count;
- //设置工具箱中index位置选项卡的标题
- ui.toolBox->setItemText(0, QStringLiteral("小学"));
- ui.toolBox->setItemText(1, QStringLiteral("初中"));
- ui.toolBox->setItemText(2, QStringLiteral("高中"));
-
- //在工具箱的指定位置添加一个选项卡
- ui.toolBox->insertItem(3, new QPushButton,QStringLiteral("大学"));
- //给工具箱尾部添加一个选项卡
- ui.toolBox->addItem(new QWidget, QStringLiteral("E"));
-
- //给工具箱尾部添加一个带图标的选项卡
- QIcon icon(":/ButtonsWidget06/image/1.png");//图标路径
- ui.toolBox->addItem(new QWidget, icon, QStringLiteral("F"));
- //移除工具箱中索引index位置对应的选项卡, 注意: 小部件没有被删除
- //ui.toolBox->removeItem(5);
- //设置索引index位置的选项卡是否可用, 参数 enabled=true为可用, enabled=false为禁用
- ui.toolBox->setItemEnabled(4, false);
- //设置工具箱中index位置选项卡的图标
- ui.toolBox->setItemIcon(0, QIcon(":/ButtonsWidget06/image/2.png"));
- //设置工具箱中index位置选项卡的提示信息(需要鼠标在选项卡上悬停一定时长才能显示)
- ui.toolBox->setItemToolTip(2,QStringLiteral("俺也不知道"));
- //如果位置索引的项已启用,则返回true;否则返回false。
- qDebug()<<ui.toolBox->isItemEnabled(0);
- // 返回位置索引处项目的图标,如果索引超出范围,则返回空图标。
- qDebug() << QIcon(ui.toolBox->itemIcon(0));
- // 返回工具箱中包含的项的数量。
- qDebug() << ui.toolBox->count();
List Widget
:列表控件Tree Widget
:树形控件Table Widget
:表格控件Qt中用于项处理的组件有两类:
一类是ItemViews,包扩QListView、QtreeView、QTableView和QColumnView等。
一类是Item Widgets,包括QListWidget(项目列表)、QtreeWidget(多层次树)和QTableWidget(表格)
前者基于模型/视图(Model/View),需要自己来建立模型保存数据,这样组织数据可以降低数据冗余,提高编程效率,但需要对模型视图有一点的了解。
后者可以看作前者的升级版,它不需要我们自己去建模,他已经为我们建立了一个数据存储模型QListWidgetItem,我们可以通过addItem()直接使用这个数据模型来添加数据。
QListWidget常用方法
1、addItem()添加
2、insertItem()插入
3、item()获取
4、takeItem()删除
5、clear()清空
6、setAlternatingRow()开启交替行颜色显示
常用信号:
1、currentItemChange 当前项改变时发出信号
2、itemClicked 点击某些时发出
实现代码:
- m_pMenu = new QMenu(this);
- m_pAddAction = new QAction(QStringLiteral("添加"));
- m_pInsAction = new QAction(QStringLiteral("插入"));
- m_pClearAction = new QAction(QStringLiteral("清空"));
- m_pMenu->addAction(m_pAddAction);
- m_pMenu->addAction(m_pInsAction);
- m_pMenu->addAction(m_pClearAction);
-
- connect(m_pAddAction, &QAction::triggered, this, &itemProgect07::on_pushButtonAdd_clicked);
- connect(m_pInsAction, &QAction::triggered, this, &itemProgect07::on_pushButtonIns_clicked);
- connect(m_pClearAction, &QAction::triggered, this, &itemProgect07::on_pushButtonClear_clicked);
-
-
- //单选按钮添加到按钮组中并关联槽函数
- m_pButtonGroup = new QButtonGroup(this);
- m_pButtonGroup->addButton(ui.iconRadioButton, 1);
- m_pButtonGroup->addButton(ui.listRadioButton, 0);
- connect(m_pButtonGroup, SIGNAL(buttonClicked(int)), this, SLOT(OnModeChangeSlot(int)));
- //设置QListWidget为列表模式
- ui.listWidget->setViewMode(QListView::ListMode);
- //初始打开界面,显示图标模式
- ui.listRadioButton->setChecked(true);
- ui.listWidget->setAlternatingRowColors(true);//行交替显示颜色
-
绑定的槽函数:
- //添加某一行
- void itemProgect07::on_pushButtonAdd_clicked()
- {
- ui.listWidget->addItem(QStringLiteral("山西省"));
- //添加带图标的列表项
- QIcon icon(":/itemProgect07/image/1.png");
- QListWidgetItem *item = new QListWidgetItem(icon, QStringLiteral("河南省"));
- ui.listWidget->addItem(item);
-
- QListWidgetItem *item2 = new QListWidgetItem(QIcon(":/itemProgect07/image/2.png"), QStringLiteral("广东省"));
- ui.listWidget->addItem(item2);
-
- }
-
- //插入某一行
- void itemProgect07::on_pushButtonIns_clicked()
- {
- QListWidgetItem *item = new QListWidgetItem(QIcon(":/itemProgect07/image/3.png"), QStringLiteral("台湾省"));
- //默认获取第0行,如果用户没有点击某行,默认返回下标为0的行
- int row = ui.listWidget->currentRow();
- //在指定行nRow的上方插入一行
- ui.listWidget->insertItem(row, item);
-
- }
-
-
- //删除某一行
- void itemProgect07::on_pushButtonDal_clicked()
- {
- //方法一
- //获取当前行对象
- QListWidgetItem *item = ui.listWidget->currentItem();
- ui.listWidget->removeItemWidget(item);
- //需要手动释放item
- delete item;
-
- //方法二
- /*int row = ui.listWidget->currentRow();
- ui.listWidget->takeItem(row);*/
- }
-
- //清空
- void itemProgect07::on_pushButtonClear_clicked()
- {
- ui.listWidget->clear();
- }
-
- void itemProgect07::OnModeChangeSlot(int id)
- {
- if (0 == id)
- {
- ui.listWidget->setViewMode(QListView::ListMode);
- }
- else {
- ui.listWidget->setViewMode(QListView::IconMode);
- }
-
- }
-
- //当前选中项
- void itemProgect07::on_listWidget_itemClicked(QListWidgetItem * item)
- {
- //获取文本
- QString strText = item->text();
- ui.lineEdit->setText(strText);
-
- }
-
- void itemProgect07::on_listWidget_customContextMenuRequested(const QPoint & pos)
- {
- //在鼠标光标出现的位置显示菜单
- m_pMenu->exec(QCursor::pos());
- }
QTreeWidget的常用方法:
1、setCheckState()
2、childCount()
3、child()
信号:itemClicked
实现代码:
- //树形控件
- ui.treeWidget->setHeaderHidden(true);//隐藏树形的表头
- QTreeWidgetItem *topItem1 = new QTreeWidgetItem(ui.treeWidget);
- topItem1->setText(0, QStringLiteral("阿里巴巴"));
- topItem1->setCheckState(0, Qt::Unchecked);//默认不选上
- ui.treeWidget->addTopLevelItem(topItem1);
-
- //创建研发部子节点
- QTreeWidgetItem *developItem = new QTreeWidgetItem(topItem1);
- developItem->setText(0, QStringLiteral("研发部"));
- developItem->setCheckState(0, Qt::Unchecked);//checked默认选上
-
- //研发一组
- QTreeWidgetItem *developOne = new QTreeWidgetItem(developItem);
- developOne->setText(0, QStringLiteral("研发一组"));
- developOne->setCheckState(0, Qt::Unchecked);
- //研发二组
- QTreeWidgetItem *developTwo = new QTreeWidgetItem(developItem);
- developTwo->setText(0, QStringLiteral("研发二组"));
- developTwo->setCheckState(0, Qt::Unchecked);
-
- //创建销售部
- QTreeWidgetItem *saleItem = new QTreeWidgetItem(topItem1);
- saleItem->setText(0, QStringLiteral("销售部"));
- saleItem->setCheckState(0, Qt::Unchecked);
-
- //销售一组
- QTreeWidgetItem *saleOne = new QTreeWidgetItem(saleItem);
- saleOne->setText(0, QStringLiteral("销售一组"));
- saleOne->setCheckState(0, Qt::Unchecked);
-
- //展开所有节点
- ui.treeWidget->expandAll();
-
- //点击某个父节点,其下索引子节点的勾选状态会变化
- connect(ui.treeWidget, &QTreeWidget::itemClicked, this, &itemProgect07::OnSelectAllItemSlot);
绑定槽函数:
- //父层勾选,其子层也勾选
- void itemProgect07::OnSelectAllItemSlot(QTreeWidgetItem * item, int column)
- {
- //获取子节点个数
- int size = item->childCount();
- for (int i = 0; i < size; i++)
- {
- //获取子节点item
- QTreeWidgetItem *childItem = item->child(i);
- if (childItem == nullptr)
- {
- return;
- }
- int count = childItem->childCount();
- //item->checkState(0):获取父节点的勾选状态,设置给子节点
- childItem->setCheckState(0, item->checkState(0));
- for (int j = 0; j < count; j++)
- {
- QTreeWidgetItem *innerChild = childItem->child(j);
- if (nullptr != innerChild)
- {
- innerChild->setCheckState(0, childItem->checkState(0));
- }
- }
- }
- }
QTableWidget,是Qt中的表格组件,用于表示行列组成的二维表,表格一般有表头。
QTableWidget常用方法:
1、setRowCount()
2、setColunmnCount()
3、setHorizontalHeaderItem()
4、setItem()/item()
-
- //初始化表头/标题
- void itemProgect07::on_setHeadBtn_clicked()
- {
- QStringList headList;
- headList << QStringLiteral("姓名") << QStringLiteral("性别") << QStringLiteral("学号") << QStringLiteral("年龄") << QStringLiteral("年级");
- //设置表格列的数目
- ui.tableWidget->setColumnCount(headList.count());
- QTableWidgetItem *headItem;
- //获取表格中的列数:columnCount()
- for (int i = 0; i < ui.tableWidget->columnCount(); i++)
- {
- headItem = new QTableWidgetItem(headList.at(i));
- QFont font = headItem->font();
- font.setBold(true);//字体加粗
- font.setPointSize(12);//颜色
- headItem->setTextColor(Qt::red);//字体颜色
- headItem->setFont(font);
-
- ui.tableWidget->setHorizontalHeaderItem(i, headItem);
- }
- }
-
- //初始化行数
- void itemProgect07::on_setRowBtn_clicked()
- {
- //设置表格的行数,设置10行,行号0-9
- ui.tableWidget->setRowCount(ui.spinBox->value());
- //设置交易行背景色
- ui.tableWidget->setAlternatingRowColors(true);
- }
-
- //初始化数据
- void itemProgect07::on_initDataBtn_clicked()
- {
- //姓名、性别、学号、年龄、年级
- QString strName, strGender, strNum, strAge, strGrade;
- ui.tableWidget->clearContents();//只清除数据,不清楚表头
- //行数
- int nRow = ui.tableWidget->rowCount();
- //行循环
- for (int i = 0; i < nRow; i++)
- {
- if (i % 2 == 0)
- {
- strGender = QStringLiteral("女");
- }
- else
- {
- strGender = QStringLiteral("男");
- }
- //列循环
- for (int j = 0; j < ui.tableWidget->columnCount(); j++)
- {
- //姓名
- if (j == 0)
- {
- //格式化字符串
- strName = QStringLiteral("学生%1哈哈").arg(i);
- //创建单元格
- QTableWidgetItem *itemName = new QTableWidgetItem(strName);
- //单元格内容添加到表格上面
- ui.tableWidget->setItem(i, j, itemName);
- }
- //性别
- if (j == 1) {
- //性别
- QTableWidgetItem *itemGender = new QTableWidgetItem(strGender);
- ui.tableWidget->setItem(i, j, itemGender);
- }
- //学号
- if (j == 2) {
- strNum = QString("202300%1%2").arg(i).arg(j);
- QTableWidgetItem *itemNum = new QTableWidgetItem(strNum);
- ui.tableWidget->setItem(i, j, itemNum);
- }
- //年龄
- if (j == 3) {
- strAge = QString::number(i + j);
- QTableWidgetItem *itemAge = new QTableWidgetItem(strAge);
- ui.tableWidget->setItem(i, j, itemAge);
- }
- //年级
- if (j == 4) {
- strGrade = QString::number(i + 1);
- QTableWidgetItem *itemGrade = new QTableWidgetItem(strGrade);
- ui.tableWidget->setItem(i, j, itemGrade);
- }
- }
-
- }
- }
-
- //插入行
- void itemProgect07::on_insertRowBtn_clicked()
- {
- int curRow = ui.tableWidget->currentRow();
- if (curRow == -1)
- {
- QMessageBox::information(nullptr, QStringLiteral("提示"), QStringLiteral("请先选择一行"));
- return;
- }
- ui.tableWidget->insertRow(curRow);
- for (int i = 0; i < ui.tableWidget->columnCount(); i++)
- {
- QTableWidgetItem *item = new QTableWidgetItem("Insert");
- ui.tableWidget->setItem(curRow, i, item);
- }
- }
-
- //删除行
- void itemProgect07::on_deleteRowBtn_clicked()
- {
- int nRow = ui.tableWidget->currentRow();
- if (nRow == -1)
- {
- QMessageBox::information(nullptr, QStringLiteral("提示"), QStringLiteral("请先选择一行"));
- return;
- }
- ui.tableWidget->removeRow(nRow);
-
-
- }
-
- //调整行高
- void itemProgect07::on_modifyHeigthBth_clicked()
- {
- ui.tableWidget->resizeRowsToContents();
- }
-
- //调整列宽
- void itemProgect07::on_modifyWidthBtn_clicked()
- {
- ui.tableWidget->resizeColumnsToContents();
- }
-
- //读取数据
- void itemProgect07::on_readDataBtn_clicked()
- {
- QString strText;
- QTableWidgetItem *cellItem;
- ui.textEdit->clear();//清空文本块编辑器内容
- //逐行
- for (int i = 0; i < ui.tableWidget->rowCount(); i++)
- {
- strText = QStringLiteral("第%1行:").arg(i+1);
- //逐列
- for (int j = 0; j < ui.tableWidget->columnCount(); j++)
- {
- cellItem = ui.tableWidget->item(i, j);
- QString str = cellItem->text();
- //字符串拼接
- strText = strText + str +" ";
- }
- strText += "\n";
- ui.textEdit->insertPlainText(strText);
- }
- }
Qt中和图形视图相关的类有三个:QGraphiocsView视图类、QGraphicsScene场景类、QGraphicsItem场景项
前者的关系是场景项(直线、按钮、圆形、文本) 需要添加到场景类中,场景类需要添加到视图类中才能显示出来。
这三个类通常用于二位或三维图形显示开发,能够快速显示万亿级别的视图。
- #include<QtWidgets/QApplication>
- #include <QGraphicsView>
- #include <QGraphicsScene>
- #include <QGraphicsItem>
- #include <QPushButton>
- #include <QGraphicsEllipseItem>
-
- int main(int arg, char *argv[])
- {
- QApplication a(arg, argv);
- //创建场景对象
- QGraphicsScene scene(-200, -200, 400, 400);
- //创建试图对象并将场景添加到试图中
-
- //方式一:QGraphicsScene提供的默认添加项的方法
- QGraphicsItem *item = scene.addText("Hello world", QFont("宋体", 12));
- //QPushButton *btn = new QPushButton("button");
- //scene.addWidget(btn);
-
- //方式二:自己创建对象,然后添加(灵活,可以自己调整位置)
- QGraphicsEllipseItem item1(0, 0,100,100);
- item1.setPos(50, 50);
- scene.addItem(&item1);
-
- QGraphicsLineItem item2(0, 0, 150, 150);
- scene.addItem(&item2);
-
- //展示两个窗口
- QGraphicsView view;
- view.setScene(&scene);
- view.show();
-
- QGraphicsView view1;
- view1.setScene(&scene);
- view1.show();
- return a.exec();
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。