上面的程序仅仅可以显示一个 大概 的界面,对其进行单击等操作,界面仅有一些简单的反应,对应的程序不能得知界面有什么改变(是否进行单击选择,文本框中是否有文字输入)

下面对程序进行完善。

T05Controls.pro

 HEADERS += \
MyWidget.h SOURCES += \
MyWidget.cpp QT += widgets gui CONFIG += C++

MyWidget.h

 #ifndef MYWIDGET_H
#define MYWIDGET_H #include <QWidget>
#include <QTextEdit>
class MyWidget : public QWidget
{
Q_OBJECT
public:
explicit MyWidget(QWidget *parent = nullptr); QTextEdit* _edit; //保存到成员变量里面 signals: public slots:
void slotComboBoxIndexChanged(const QString&); //槽 函数
}; #endif // MYWIDGET_H

MyWidget.cpp

 #include "MyWidget.h"
#include <QApplication>
#include <QLabel> //display ststic text, or image
#include <QPushButton>
#include <QLineEdit> //single line #include <QComboBox>
#include <QCheckBox>
#include <QRadioButton>
#include <QTextEdit> //multi lines, rich text
#include <QTextBrowser> //readonly textedit
#include <QGroupBox>
#include <QSlider> //模拟方式显示数值
#include <QSpinBox> //数字
#include <QDateEdit>
#include <QTimeEdit>
#include <QDateTimeEdit>
#include <QTabWidget> //不介绍,不算控件 #include <QCompleter>
#include <QVBoxLayout>
#include <QDebug>
#include <QHBoxLayout>
#include <QLCDNumber>
MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
{
QVBoxLayout* lay = new QVBoxLayout(this); //this ,MyWidget,不用写this->setLayout();
QLabel* label;
QComboBox* combo;
QPushButton* button;
QRadioButton* radio;
QTextEdit* edit;
QGroupBox* group; lay->addWidget(label = new QLabel("<font color = red>Label</font>")); //支持html,静态文本 lay->addWidget(button = new QPushButton("Button"));
button->setStyleSheet("QPushButton {font:bold 16px; color:green}"); lay->addWidget(radio = new QRadioButton("Radio"));
radio->setStyleSheet("QRadioButton {font:bold 16px; color:blue}");
connect(radio, &QRadioButton::clicked,[](bool v){
qDebug() << v;
}); lay->addWidget(new QCheckBox("check box")); lay->addWidget(combo = new QComboBox());
combo->addItem("Select item1");
combo->addItem("Select item2");
combo->addItem("nizhipeng");
combo->addItem("jackson");
combo->setEditable(true); //下拉框可编辑
connect(combo, SIGNAL(currentIndexChanged(QString)), this, SLOT(slotComboBoxIndexChanged(QString))); combo->setCompleter(new QCompleter(QStringList() << "nizhipeng" << "jackson" )); lay->addWidget(edit = new QTextEdit);
edit->setText("<table border=1><tr><th>head1</th><th>head2</th></tr>"
"<tr><td>value1</td><td>value2</td></tr>"
"<tr><td>value3</td><td>value4</td></tr>"
"</table><br>"
"<img src=../doge.jpg></img>");
_edit = edit;
connect(edit, &QTextEdit::textChanged, [&](){
//(QTextEdit*) edit = this->sender();
qDebug() << _edit->toPlainText();
});
//edit->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); 不写也有滚动条
//edit->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//将水平滚动条取消 lay->addWidget(group = new QGroupBox("Some items"));//lay->addWidget(group = new QGroupBox);
QHBoxLayout* hBoxlay;
group->setLayout(hBoxlay = new QHBoxLayout);
hBoxlay->addWidget(new QPushButton("aaa"));
hBoxlay->addWidget(new QPushButton("aaa")); QSlider* slider;
QSpinBox* spinBox; lay->addWidget(slider = new QSlider(Qt::Horizontal));
slider->setMaximum();
slider->setMinimum();
//slider->value(); lay->addWidget(spinBox = new QSpinBox);
spinBox->setMaximum();
spinBox->setMinimum(); connect(slider,SIGNAL(valueChanged(int)), spinBox, SLOT(setValue(int)));//互相影响
connect(spinBox,SIGNAL(valueChanged(int)), slider, SLOT(setValue(int))); lay->addWidget(new QDateTimeEdit); QLCDNumber* lcd;
lay->addWidget(lcd = new QLCDNumber());
lcd->display();
//lcd->setMode(QLCDNumber::Hex); //16进制
lcd->setSegmentStyle(QLCDNumber::Flat);//数字更清晰 } //槽函数
void MyWidget::slotComboBoxIndexChanged(const QString &str)
{
qDebug() << "slotComboBoxIndexChanged" << str;
} int main(int argc, char** argv)
{
QApplication app(argc, argv); MyWidget w;
w.show(); return app.exec();
}

下面详细的介绍以上完整的程序:

     QLabel* label;
lay->addWidget(label = new QLabel("<font color = red>Label</font>")); //支持html,静态文本

 QPushButton* button;
lay->addWidget(button = new QPushButton("Button"));
button->setStyleSheet("QPushButton {font:bold 16px; color:green}");

如果不需要特殊设置颜色,只需要写成 lay->addWidget( new QPushButton("Button") );

 QRadioButton* radio;
lay->addWidget(radio = new QRadioButton("Radio"));
radio->setStyleSheet("QRadioButton {font:bold 16px; color:blue}");//设置颜色
connect(radio, &QRadioButton::clicked,[](bool v){
qDebug() << v;
});

选择返回true,不选择返回false。

lay->addWidget(new QCheckBox("check box"));

仅仅显示

     QComboBox* combo;
lay->addWidget(combo = new QComboBox());
combo->addItem("Select item1");
combo->addItem("Select item2");
combo->addItem("nizhipeng");
combo->addItem("jackson");
combo->setEditable(true); //下拉框可编辑
connect(combo, SIGNAL(currentIndexChanged(QString)), this,SLOT(slotComboBoxIndexChanged(QString))); combo->setCompleter(new QCompleter(QStringList() << "nizhipeng" << "jackson" ));//补全提示

设置下拉框中内容,获得改变后的值,设置补全提示。

其中槽函数为:

 //槽函数
void MyWidget::slotComboBoxIndexChanged(const QString &str)
{
qDebug() << "slotComboBoxIndexChanged" << str;
}
输出为 "slotComboBoxIndexChanged" << str;与上图一致。

根据下拉框中选择的内容,返回对应的内容。

     QTextEdit* edit;
lay->addWidget(edit = new QTextEdit);
edit->setText("<table border=1><tr><th>head1</th><th>head2</th></tr>"
"<tr><td>value1</td><td>value2</td></tr>"
"<tr><td>value3</td><td>value4</td></tr>"
"</table><br>"
"<img src=../doge.jpg></img>");
_edit = edit;
connect(edit, &QTextEdit::textChanged, [&](){
//(QTextEdit*) edit = this->sender();
qDebug() << _edit->toPlainText();
});

可以输入的文本框。

     QGroupBox* group;
lay->addWidget(group = new QGroupBox("Some items"));//lay->addWidget(group = new QGroupBox);
QHBoxLayout* hBoxlay;
group->setLayout(hBoxlay = new QHBoxLayout);
hBoxlay->addWidget(new QPushButton("aaa"));
hBoxlay->addWidget(new QPushButton("aaa"));

     QSlider* slider;
QSpinBox* spinBox; lay->addWidget(slider = new QSlider(Qt::Horizontal));
slider->setMaximum();
slider->setMinimum();
//slider->value(); lay->addWidget(spinBox = new QSpinBox);
spinBox->setMaximum();
spinBox->setMinimum(); connect(slider,SIGNAL(valueChanged(int)), spinBox, SLOT(setValue(int)));//互相影响
connect(spinBox,SIGNAL(valueChanged(int)), slider, SLOT(setValue(int)));

上下的值互相对应,一个改变另一个也改变。

lay->addWidget(new QDateTimeEdit);

     QLCDNumber* lcd;
lay->addWidget(lcd = new QLCDNumber());
lcd->display();
//lcd->setMode(QLCDNumber::Hex); //16进制
lcd->setSegmentStyle(QLCDNumber::Flat);//数字更清晰

Qt5学习笔记(控件)的更多相关文章

  1. WPF学习笔记 控件篇 属性整理【1】FrameworkElement

    最近在做WPF方面的内容,由于好多属性不太了解,经常想当然的设置,经常出现自己未意料的问题,所以感觉得梳理下. ps:先补下常用控件的类结构,免得乱了 .NET Framework 4.5 Using ...

  2. Delphi 7学习开发控件

    我们知道使用Delphi快速开发,很大的一方面就是其强大的VCL控件,另外丰富的第三方控件也使得Delphi程序员更加快速的开发出所需要的程序.在此不特别介绍一些概念,只记录自己学习开发控件的步骤.假 ...

  3. 过实现鹰眼图这个功能来进一步学习MapControl控件

    我们通过实现鹰眼图这个功能来进一步学习MapControl控件.在实现鹰眼图之前,我们需 要接口有更深入的了解. 变主动为被动-出接口(OutBound interface) COM编程类似客户端和服 ...

  4. Expression Blend学习四控件

    原文:Expression Blend学习四控件 Expression Blend制作自定义按钮 1.从Blend工具箱中添加一个Button,按住shift,将尺寸调整为125*125; 2.右键点 ...

  5. Expression Blend学习5控件

    原文:Expression Blend学习5控件 Expression Blend ButtonStyle- TextButton 本章以TextButton为例,讲解如何最简单,最快速的制作一个专业 ...

  6. Delphi 7学习开发控件(继承TGraphicControl只画一条线)

    我们知道使用Delphi快速开发,很大的一方面就是其强大的VCL控件,另外丰富的第三方控件也使得Delphi程序员更加快速的开发出所需要的程序.在此不特别介绍一些概念,只记录自己学习开发控件的步骤.假 ...

  7. Qt5学习笔记(1)-环境配置(win+64bit+VS2013)

    Qt5学习笔记(1)-环境配置 工欲善其事必先-不装-所以装软件 久不露面,赶紧打下酱油. 下载 地址:http://download.qt.io/ 这个小网页就可以下载到跟Qt有关的几乎所有大部分东 ...

  8. 安卓开发_深入学习ViewPager控件

    一.概述 ViewPager是android扩展包v4包(android.support.v4.view.ViewPager)中的类,这个类可以让用户左右切换当前的view. ViewPager特点: ...

  9. Android Studio 学习 - 基本控件的使用;Intent初学

    Android Studio学习第三天. 今天主要学习 1. RadioButton.CheckBox.RatingBar.SeekBar等基础控件的使用. 结合Delphi中相类似的控件,在这些基本 ...

随机推荐

  1. LeetCode之链表

    2. Add Two Numbers You are given two linked lists representing two non-negative numbers. The digits ...

  2. python 迭代器/生成器/迭代对象

    生成器: 带有yield的函数 迭代器:带有next 方法的对象,可以作为内建函数next的参数 迭代对象:带有__iter__方法的对象,__iter__方法返回迭代器 -------------- ...

  3. input和React-Native的TextInput的输入限制,只能输入两位小数(阻止0开头的输入),类似价格限制

    一.背景: 想要实现一功能: 1. 最多只能输入两位小数,类似的价格限制 2. 实时监听限制输入,禁止输入不符合规范的字符(当输入违禁字符,进行删除操作) 这样做的优点: 1. 在用户输入时直接进行限 ...

  4. 解题报告 - 577. Employee Bonus

    Select all employee's name and bonus whose bonus is < 1000. Table:Employee +-------+--------+---- ...

  5. 41-邮差送信(dfs)

    邮差送信 (15分)C时间限制:1 毫秒 |  C内存限制:3000 Kb题目内容: 有一个邮递员要在n个城市之间来回送信.但有的城市之间有大路相连而有的没有路.现在要由一个城市到另一个城市送信,中途 ...

  6. rabbitmq 和Spring 集成 实现(一)

    1.增加pom.xml依赖 <!--rabbitmq消息队列依赖架包--> <dependency> <groupId>org.springframework.am ...

  7. 安装bcmath 扩展

    1.在php源码包中,默认就包含bcmath扩展的安装文件,只需手动安装一下即可 cd /root/build2/php-/ext/bcmath // 进入PHP的源码包目录中的bcmatch扩展目录 ...

  8. [OS] 修改屏幕分辨率(用Remote Desktop Connection 或者 用工具:Remote Desktop Connection Manager)

    用Remote Desktop Connection Remote Desktop Connection Manager

  9. [SoapUI]怎样获取上一个Test Step的名字

    def currentStepInd = context.currentStepIndex def previousStep = testRunner.testCase.getTestStepAt(c ...

  10. ruby变量

    Ruby 支持五种类型的变量. 一般小写字母.下划线开头:变量(Variable).局部变量的作用域从 class.module.def 或 do 到相对应的结尾或者从左大括号到右大括号 {}. 当调 ...