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

下面对程序进行完善。

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. securecrt中使用上传下载sftp

    securecrt中使用上传下载sftp   SecureCRT这个工具自带了一个FTP,方便我们上传和下载,而且做的比较人性化,由于其基本命令和linux中基本命令大都相似,熟悉LINUX人能很容易 ...

  2. 迷你MVVM框架 avalonjs 0.91发布

    本版本修了一些BUG与不合理的地方,感谢感谢ztz, 民工精髓, 姚立, qiangtou等人指正. 处理AMD加载 旧式IE下移除script节点内存泄漏的问题 fix firefox 全系列vis ...

  3. 迷你MVVM框架 avalonjs 沉思录 第2节 DOM操作的三大问题

    jQuery之所以击败Prototype.js,是因为它自一开始就了解这三大问题,并提出完善的解决方案. 第一个问题,DOM什么时候可用.JS不像C那样有一个main函数,里面的逻辑不分主次.但JS是 ...

  4. Linux中shell变量$0,$?等含义

    linux中shell变量$#,$@,$0,$1,$2的基本含义: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行 ...

  5. POJ1163 数学三角求最大路径

    描述:输入,行数,之后接数据,第一行一个数据,之后每行加一.5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 思路:简单动态规划问题.dp[i][j]定义为到这个数为止(包括这个数)的最 ...

  6. 18-(unicode error) 'unicodeescape' codec can't decode bytes in position 16-17: truncated \uXXXX escape

    读取文件时碰到问题: 1.(unicode error) 'unicodeescape' codec can't decode bytes in position 16-17: truncated \ ...

  7. 数据库查询返回Resource id #9后的处理方式

    如果在调用PHP查询数据库,在echo后返回的是Resource id #9,可能你的输出方式是: $sql="SELECT * FROM dbname WHERE id='1'" ...

  8. 07Mendel's First Law

    Problem Figure 2. The probability of any outcome (leaf) in a probability tree diagram is given by th ...

  9. swoole1.8.0+版本异步redis安装(本实例为swoole1.8.10版本)详解

    Swoole-1.8.0+版本增加了对异步Redis客户端的支持,基于redis官方提供的hiredis库实现.Swoole提供了__call魔术方法,来映射绝大部分Redis指令(本次安装实例为sw ...

  10. Function 对象 & anonymous 匿名函数

    functionName = new Function( [argname1, [... argnameN,]] body ); 例子: var say = new Function("na ...