新增控件

master
feiyangqingyun 2019-10-10 13:42:12 +08:00
parent c69997e1b6
commit 5202754498
16 changed files with 865 additions and 32 deletions

32
.gitignore vendored
View File

@ -1,32 +0,0 @@
# Prerequisites
*.d
# Compiled Object files
*.slo
*.lo
*.o
*.obj
# Precompiled Headers
*.gch
*.pch
# Compiled Dynamic libraries
*.so
*.dylib
*.dll
# Fortran module files
*.mod
*.smod
# Compiled Static libraries
*.lai
*.la
*.a
*.lib
# Executables
*.exe
*.out
*.app

View File

@ -15,3 +15,5 @@ Qt编写的一些开源的demo包括串口调试助手、网络调试助手
| 9 | styledemo | 高仿PS黑色+扁平白色+淡蓝色风格主题 |
| 10 | navbutton | 导航按钮控件 |
| 11 | video_splite | 视频监控画面分割demo |
| 12 | framelesswidget | 通用无边框拖动拉伸类 |
| 13 | ipaddress | IP地址输入控件 |

View File

@ -0,0 +1,191 @@
#include "framelesswidget.h"
#include "qevent.h"
#include "qdebug.h"
FramelessWidget::FramelessWidget(QObject *parent) : QObject(parent)
{
padding = 8;
widget = 0;
pressed = false;
pressedLeft = false;
pressedRight = false;
pressedTop = false;
pressedBottom = false;
pressedLeftTop = false;
pressedRightTop = false;
pressedLeftBottom = false;
pressedRightBottom = false;
//如果父类是窗体则直接设置
if (parent->isWidgetType()) {
setWidget((QWidget *)parent);
}
}
bool FramelessWidget::eventFilter(QObject *watched, QEvent *event)
{
if (widget != 0 && watched == widget) {
if (event->type() == QEvent::Resize) {
//重新计算八个描点的区域,描点区域的作用还有就是计算鼠标坐标是否在某一个区域内
int width = widget->width();
int height = widget->height();
//左侧描点区域
rectLeft = QRectF(0, padding, padding, height - padding * 2);
//上侧描点区域
rectTop = QRectF(padding, 0, width - padding * 2, padding);
//右侧描点区域
rectRight = QRectF(width - padding, padding, padding, height - padding * 2);
//下侧描点区域
rectBottom = QRectF(padding, height - padding, width - padding * 2, padding);
//左上角描点区域
rectLeftTop = QRectF(0, 0, padding, padding);
//右上角描点区域
rectRightTop = QRectF(width - padding, 0, padding, padding);
//左下角描点区域
rectLeftBottom = QRectF(0, height - padding, padding, padding);
//右下角描点区域
rectRightBottom = QRectF(width - padding, height - padding, padding, padding);
} else {
QMouseEvent *mouseEvent = (QMouseEvent *)event;
if (event->type() == QEvent::MouseButtonPress) {
//记住当前控件坐标和宽高以及鼠标按下的坐标
rectX = widget->x();
rectY = widget->y();
rectW = widget->width();
rectH = widget->height();
lastPos = mouseEvent->pos();
//判断按下的手柄的区域位置
if (rectLeft.contains(lastPos)) {
pressedLeft = true;
} else if (rectRight.contains(lastPos)) {
pressedRight = true;
} else if (rectTop.contains(lastPos)) {
pressedTop = true;
} else if (rectBottom.contains(lastPos)) {
pressedBottom = true;
} else if (rectLeftTop.contains(lastPos)) {
pressedLeftTop = true;
} else if (rectRightTop.contains(lastPos)) {
pressedRightTop = true;
} else if (rectLeftBottom.contains(lastPos)) {
pressedLeftBottom = true;
} else if (rectRightBottom.contains(lastPos)) {
pressedRightBottom = true;
} else {
pressed = true;
}
} else if (event->type() == QEvent::MouseMove) {
//设置对应鼠标形状
QPoint point = mouseEvent->pos();
if (rectLeft.contains(point)) {
widget->setCursor(Qt::SizeHorCursor);
} else if (rectRight.contains(point)) {
widget->setCursor(Qt::SizeHorCursor);
} else if (rectTop.contains(point)) {
widget->setCursor(Qt::SizeVerCursor);
} else if (rectBottom.contains(point)) {
widget->setCursor(Qt::SizeVerCursor);
} else if (rectLeftTop.contains(point)) {
widget->setCursor(Qt::SizeFDiagCursor);
} else if (rectRightTop.contains(point)) {
widget->setCursor(Qt::SizeBDiagCursor);
} else if (rectLeftBottom.contains(point)) {
widget->setCursor(Qt::SizeBDiagCursor);
} else if (rectRightBottom.contains(point)) {
widget->setCursor(Qt::SizeFDiagCursor);
} else {
widget->setCursor(Qt::ArrowCursor);
}
//根据当前鼠标位置,计算XY轴移动了多少
QPoint pos = mouseEvent->pos();
int dx = pos.x() - lastPos.x();
int dy = pos.y() - lastPos.y();
//根据按下处的位置判断是否是移动控件还是拉伸控件
if (pressed) {
widget->move(widget->x() + dx, widget->y() + dy);
} else if (pressedLeft) {
int resizeW = widget->width() - dx;
if (widget->minimumWidth() <= resizeW) {
widget->setGeometry(widget->x() + dx, rectY, resizeW, rectH);
}
} else if (pressedRight) {
widget->setGeometry(rectX, rectY, rectW + dx, rectH);
} else if (pressedTop) {
int resizeH = widget->height() - dy;
if (widget->minimumHeight() <= resizeH) {
widget->setGeometry(rectX, widget->y() + dy, rectW, resizeH);
}
} else if (pressedBottom) {
widget->setGeometry(rectX, rectY, rectW, rectH + dy);
} else if (pressedLeftTop) {
int resizeW = widget->width() - dx;
int resizeH = widget->height() - dy;
if (widget->minimumWidth() <= resizeW) {
widget->setGeometry(widget->x() + dx, widget->y(), resizeW, resizeH);
}
if (widget->minimumHeight() <= resizeH) {
widget->setGeometry(widget->x(), widget->y() + dy, resizeW, resizeH);
}
} else if (pressedRightTop) {
int resizeW = rectW + dx;
int resizeH = widget->height() - dy;
if (widget->minimumHeight() <= resizeH) {
widget->setGeometry(widget->x(), widget->y() + dy, resizeW, resizeH);
}
} else if (pressedLeftBottom) {
int resizeW = widget->width() - dx;
int resizeH = rectH + dy;
if (widget->minimumWidth() <= resizeW) {
widget->setGeometry(widget->x() + dx, widget->y(), resizeW, resizeH);
}
if (widget->minimumHeight() <= resizeH) {
widget->setGeometry(widget->x(), widget->y(), resizeW, resizeH);
}
} else if (pressedRightBottom) {
int resizeW = rectW + dx;
int resizeH = rectH + dy;
widget->setGeometry(widget->x(), widget->y(), resizeW, resizeH);
}
} else if (event->type() == QEvent::MouseButtonRelease) {
//恢复所有
pressed = false;
pressedLeft = false;
pressedRight = false;
pressedTop = false;
pressedBottom = false;
pressedLeftTop = false;
pressedRightTop = false;
pressedLeftBottom = false;
pressedRightBottom = false;
widget->setCursor(Qt::ArrowCursor);
}
}
}
return QObject::eventFilter(watched, event);
}
void FramelessWidget::setPadding(int padding)
{
this->padding = padding;
}
void FramelessWidget::setWidget(QWidget *widget)
{
if (this->widget == 0) {
this->widget = widget;
//设置鼠标追踪为真
this->widget->setMouseTracking(true);
//绑定事件过滤器
this->widget->installEventFilter(this);
//设置无边框属性
this->widget->setWindowFlags(Qt::FramelessWindowHint);
//this->widget->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint);
}
}

View File

@ -0,0 +1,66 @@
#ifndef FRAMELESSWIDGET_H
#define FRAMELESSWIDGET_H
/**
* :feiyangqingyun(QQ:517216493) 2019-10-03
* 1:widget
* 2:
* 3:,便
*/
#include <QWidget>
#ifdef quc
#if (QT_VERSION < QT_VERSION_CHECK(5,7,0))
#include <QtDesigner/QDesignerExportWidget>
#else
#include <QtUiPlugin/QDesignerExportWidget>
#endif
class QDESIGNER_WIDGET_EXPORT FramelessWidget : public QObject
#else
class FramelessWidget : public QObject
#endif
{
Q_OBJECT
public:
explicit FramelessWidget(QObject *parent = 0);
protected:
bool eventFilter(QObject *watched, QEvent *event);
private:
int padding; //边距
QWidget *widget; //无边框窗体
bool pressed; //鼠标按下
bool pressedLeft; //鼠标按下左侧
bool pressedRight; //鼠标按下右侧
bool pressedTop; //鼠标按下上侧
bool pressedBottom; //鼠标按下下侧
bool pressedLeftTop; //鼠标按下左上侧
bool pressedRightTop; //鼠标按下右上侧
bool pressedLeftBottom; //鼠标按下左下侧
bool pressedRightBottom; //鼠标按下右下侧
int rectX, rectY, rectW, rectH; //窗体坐标+宽高
QPoint lastPos; //鼠标按下处坐标
QRectF rectLeft; //左侧区域
QRectF rectRight; //右侧区域
QRectF rectTop; //上侧区域
QRectF rectBottom; //下侧区域
QRectF rectLeftTop; //左上侧区域
QRectF rectRightTop; //右上侧区域
QRectF rectLeftBottom; //左下侧区域
QRectF rectRightBottom; //右下侧区域
public Q_SLOTS:
//设置边距
void setPadding(int padding);
//设置要无边框的窗体
void setWidget(QWidget *widget);
};
#endif // FRAMELESSWIDGET_H

View File

@ -0,0 +1,23 @@
#-------------------------------------------------
#
# Project created by QtCreator 2019-10-03T10:55:58
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = framelesswidget
TEMPLATE = app
DESTDIR = $$PWD/../bin
CONFIG += warn_off
SOURCES += main.cpp
SOURCES += frmframelesswidget.cpp
SOURCES += framelesswidget.cpp
HEADERS += frmframelesswidget.h
HEADERS += framelesswidget.h
FORMS += frmframelesswidget.ui

View File

@ -0,0 +1,38 @@
#pragma execution_character_set("utf-8")
#include "frmframelesswidget.h"
#include "ui_frmframelesswidget.h"
#include "qpushbutton.h"
#include "framelesswidget.h"
frmFramelessWidget::frmFramelessWidget(QWidget *parent) : QWidget(parent), ui(new Ui::frmFramelessWidget)
{
ui->setupUi(this);
}
frmFramelessWidget::~frmFramelessWidget()
{
delete ui;
}
void frmFramelessWidget::on_btnOpen_clicked()
{
QWidget *w = new QWidget;
w->setAttribute(Qt::WA_DeleteOnClose);
w->setWindowTitle("自由拉伸无边框窗体");
w->resize(480, 320);
//设置下背景颜色区别看
QPalette palette = w->palette();
palette.setBrush(QPalette::Background, QColor(162, 121, 197));
w->setPalette(palette);
QPushButton *btn = new QPushButton(w);
connect(btn, SIGNAL(clicked(bool)), w, SLOT(close()));
btn->setGeometry(10, 10, 100, 25);
btn->setText("关闭");
FramelessWidget *f = new FramelessWidget(w);
f->setWidget(w);
w->show();
}

View File

@ -0,0 +1,26 @@
#ifndef FRMFRAMELESSWIDGET_H
#define FRMFRAMELESSWIDGET_H
#include <QWidget>
namespace Ui
{
class frmFramelessWidget;
}
class frmFramelessWidget : public QWidget
{
Q_OBJECT
public:
explicit frmFramelessWidget(QWidget *parent = 0);
~frmFramelessWidget();
private:
Ui::frmFramelessWidget *ui;
private slots:
void on_btnOpen_clicked();
};
#endif // FRMFRAMELESSWIDGET_H

View File

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>frmFramelessWidget</class>
<widget class="QWidget" name="frmFramelessWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>500</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<widget class="QPushButton" name="btnOpen">
<property name="geometry">
<rect>
<x>10</x>
<y>10</y>
<width>181</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>弹窗无边框窗体</string>
</property>
</widget>
</widget>
<resources/>
<connections/>
</ui>

31
framelesswidget/main.cpp Normal file
View File

@ -0,0 +1,31 @@
#pragma execution_character_set("utf-8")
#include "frmframelesswidget.h"
#include <QApplication>
#include <QTextCodec>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
a.setFont(QFont("Microsoft Yahei", 9));
#if (QT_VERSION <= QT_VERSION_CHECK(5,0,0))
#if _MSC_VER
QTextCodec *codec = QTextCodec::codecForName("gbk");
#else
QTextCodec *codec = QTextCodec::codecForName("utf-8");
#endif
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec);
#else
QTextCodec *codec = QTextCodec::codecForName("utf-8");
QTextCodec::setCodecForLocale(codec);
#endif
frmFramelessWidget w;
w.setWindowTitle("无边框窗体类");
w.show();
return a.exec();
}

View File

@ -0,0 +1,30 @@
#pragma execution_character_set("utf-8")
#include "frmipaddress.h"
#include "ui_frmipaddress.h"
#include "qdebug.h"
frmIPAddress::frmIPAddress(QWidget *parent) : QWidget(parent), ui(new Ui::frmIPAddress)
{
ui->setupUi(this);
}
frmIPAddress::~frmIPAddress()
{
delete ui;
}
void frmIPAddress::on_btnSetIP_clicked()
{
ui->widgetIP->setIP("192.168.1.56");
}
void frmIPAddress::on_btnGetIP_clicked()
{
qDebug() << ui->widgetIP->getIP();
}
void frmIPAddress::on_btnClear_clicked()
{
ui->widgetIP->clear();
}

28
ipaddress/frmipaddress.h Normal file
View File

@ -0,0 +1,28 @@
#ifndef FRMADDRESS_H
#define FRMADDRESS_H
#include <QWidget>
namespace Ui {
class frmIPAddress;
}
class frmIPAddress : public QWidget
{
Q_OBJECT
public:
explicit frmIPAddress(QWidget *parent = 0);
~frmIPAddress();
private:
Ui::frmIPAddress *ui;
private slots:
void on_btnSetIP_clicked();
void on_btnGetIP_clicked();
void on_btnClear_clicked();
};
#endif // FRMADDRESS_H

64
ipaddress/frmipaddress.ui Normal file
View File

@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>frmIPAddress</class>
<widget class="QWidget" name="frmIPAddress">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>500</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<widget class="QWidget" name="">
<property name="geometry">
<rect>
<x>9</x>
<y>9</y>
<width>481</width>
<height>71</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0" colspan="3">
<widget class="IPAddress" name="widgetIP" native="true"/>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="btnSetIP">
<property name="text">
<string>设置IP</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="btnGetIP">
<property name="text">
<string>获取IP</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QPushButton" name="btnClear">
<property name="text">
<string>清空</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
<layoutdefault spacing="6" margin="11"/>
<customwidgets>
<customwidget>
<class>IPAddress</class>
<extends>QWidget</extends>
<header>ipaddress.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>

202
ipaddress/ipaddress.cpp Normal file
View File

@ -0,0 +1,202 @@
#pragma execution_character_set("utf-8")
#include "ipaddress.h"
#include "qlabel.h"
#include "qlineedit.h"
#include "qboxlayout.h"
#include "qregexp.h"
#include "qvalidator.h"
#include "qevent.h"
#include "qdebug.h"
IPAddress::IPAddress(QWidget *parent) : QWidget(parent)
{
bgColor = "#FFFFFF";
borderColor = "#A6B5B8";
borderRadius = 3;
//用于显示小圆点的标签,居中对齐
labDot1 = new QLabel;
labDot1->setAlignment(Qt::AlignCenter);
labDot1->setText(".");
labDot2 = new QLabel;
labDot2->setAlignment(Qt::AlignCenter);
labDot2->setText(".");
labDot3 = new QLabel;
labDot3->setAlignment(Qt::AlignCenter);
labDot3->setText(".");
//用于输入IP地址的文本框,居中对齐
txtIP1 = new QLineEdit;
txtIP1->setObjectName("txtIP1");
txtIP1->setAlignment(Qt::AlignCenter);
txtIP1->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
connect(txtIP1, SIGNAL(textChanged(QString)), this, SLOT(textChanged(QString)));
txtIP2 = new QLineEdit;
txtIP2->setObjectName("txtIP2");
txtIP2->setAlignment(Qt::AlignCenter);
txtIP2->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
connect(txtIP2, SIGNAL(textChanged(QString)), this, SLOT(textChanged(QString)));
txtIP3 = new QLineEdit;
txtIP3->setObjectName("txtIP3");
txtIP3->setAlignment(Qt::AlignCenter);
txtIP3->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
connect(txtIP3, SIGNAL(textChanged(QString)), this, SLOT(textChanged(QString)));
txtIP4 = new QLineEdit;
txtIP4->setObjectName("txtIP4");
txtIP4->setAlignment(Qt::AlignCenter);
txtIP4->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
connect(txtIP4, SIGNAL(textChanged(QString)), this, SLOT(textChanged(QString)));
//设置IP地址校验过滤
QRegExp regExp("(2[0-5]{2}|2[0-4][0-9]|1?[0-9]{1,2})");
QRegExpValidator *validator = new QRegExpValidator(regExp, this);
txtIP1->setValidator(validator);
txtIP2->setValidator(validator);
txtIP3->setValidator(validator);
txtIP4->setValidator(validator);
//绑定事件过滤器,识别键盘按下
txtIP1->installEventFilter(this);
txtIP2->installEventFilter(this);
txtIP3->installEventFilter(this);
txtIP4->installEventFilter(this);
QFrame *frame = new QFrame;
frame->setObjectName("frameIP");
QStringList qss;
qss.append(QString("QFrame#frameIP{border:1px solid %1;border-radius:%2px;}").arg(borderColor).arg(borderRadius));
qss.append(QString("QLabel{min-width:15px;background-color:%1;}").arg(bgColor));
qss.append(QString("QLineEdit{background-color:%1;border:none;}").arg(bgColor));
qss.append(QString("QLineEdit#txtIP1{border-top-left-radius:%1px;border-bottom-left-radius:%1px;}").arg(borderRadius));
qss.append(QString("QLineEdit#txtIP4{border-top-right-radius:%1px;border-bottom-right-radius:%1px;}").arg(borderRadius));
frame->setStyleSheet(qss.join(""));
QVBoxLayout *verticalLayout = new QVBoxLayout(this);
verticalLayout->setMargin(0);
verticalLayout->setSpacing(0);
verticalLayout->addWidget(frame);
//将控件按照横向布局排列
QHBoxLayout *layout = new QHBoxLayout(frame);
layout->setMargin(0);
layout->setSpacing(0);
layout->addWidget(txtIP1);
layout->addWidget(labDot1);
layout->addWidget(txtIP2);
layout->addWidget(labDot2);
layout->addWidget(txtIP3);
layout->addWidget(labDot3);
layout->addWidget(txtIP4);
}
bool IPAddress::eventFilter(QObject *watched, QEvent *event)
{
if (event->type() == QEvent::KeyPress) {
QLineEdit *txt = (QLineEdit *)watched;
if (txt == txtIP1 || txt == txtIP2 || txt == txtIP3 || txt == txtIP4) {
QKeyEvent *key = (QKeyEvent *)event;
//如果当前按下了小数点则移动焦点到下一个输入框
if (key->text() == ".") {
this->focusNextChild();
}
//如果按下了退格键并且当前文本框已经没有了内容则焦点往前移
if (key->key() == Qt::Key_Backspace) {
if (txt->text().length() <= 1) {
this->focusNextPrevChild(false);
}
}
}
}
return QWidget::eventFilter(watched, event);
}
void IPAddress::textChanged(const QString &text)
{
int len = text.length();
int value = text.toInt();
//判断当前是否输入完成一个网段,是的话则自动移动到下一个输入框
if (len == 3) {
if (value >= 100 && value <= 255) {
this->focusNextChild();
}
}
//拼接成完整IP地址
ip = QString("%1.%2.%3.%4").arg(txtIP1->text()).arg(txtIP2->text()).arg(txtIP3->text()).arg(txtIP4->text());
}
QString IPAddress::getIP() const
{
return this->ip;
}
QSize IPAddress::sizeHint() const
{
return QSize(250, 20);
}
QSize IPAddress::minimumSizeHint() const
{
return QSize(30, 10);
}
void IPAddress::setIP(const QString &ip)
{
//先检测IP地址是否合法
QRegExp regExp("((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)");
if (!regExp.exactMatch(ip)) {
return;
}
if (this->ip != ip) {
this->ip = ip;
//将IP地址填入各个网段
QStringList list = ip.split(".");
txtIP1->setText(list.at(0));
txtIP2->setText(list.at(1));
txtIP3->setText(list.at(2));
txtIP4->setText(list.at(3));
}
}
void IPAddress::clear()
{
txtIP1->clear();
txtIP2->clear();
txtIP3->clear();
txtIP4->clear();
txtIP1->setFocus();
}
void IPAddress::setBgColor(const QString &bgColor)
{
if (this->bgColor != bgColor) {
this->bgColor = bgColor;
}
}
void IPAddress::setBorderColor(const QString &borderColor)
{
if (this->borderColor != borderColor) {
this->borderColor = borderColor;
}
}
void IPAddress::setBorderRadius(int borderRadius)
{
if (this->borderRadius != borderRadius) {
this->borderRadius = borderRadius;
}
}

81
ipaddress/ipaddress.h Normal file
View File

@ -0,0 +1,81 @@
#ifndef IPADDRESS_H
#define IPADDRESS_H
/**
* IP :feiyangqingyun(QQ:517216493) 2017-8-11
* 1:IP,
* 2:IP
* 3:
* 4:退
* 5:IP
* 6://
*/
#include <QWidget>
class QLabel;
class QLineEdit;
#ifdef quc
#if (QT_VERSION < QT_VERSION_CHECK(5,7,0))
#include <QtDesigner/QDesignerExportWidget>
#else
#include <QtUiPlugin/QDesignerExportWidget>
#endif
class QDESIGNER_WIDGET_EXPORT IPAddress : public QWidget
#else
class IPAddress : public QWidget
#endif
{
Q_OBJECT
Q_PROPERTY(QString ip READ getIP WRITE setIP)
public:
explicit IPAddress(QWidget *parent = 0);
protected:
bool eventFilter(QObject *watched, QEvent *event);
private:
QLabel *labDot1; //第一个小圆点
QLabel *labDot2; //第二个小圆点
QLabel *labDot3; //第三个小圆点
QLineEdit *txtIP1; //IP地址网段输入框1
QLineEdit *txtIP2; //IP地址网段输入框2
QLineEdit *txtIP3; //IP地址网段输入框3
QLineEdit *txtIP4; //IP地址网段输入框4
QString ip; //IP地址
QString bgColor; //背景颜色
QString borderColor;//边框颜色
int borderRadius; //边框圆角角度
private slots:
void textChanged(const QString &text);
public:
//获取IP地址
QString getIP() const;
QSize sizeHint() const;
QSize minimumSizeHint() const;
public Q_SLOTS:
//设置IP地址
void setIP(const QString &ip);
//清空
void clear();
//设置背景颜色
void setBgColor(const QString &bgColor);
//设置边框颜色
void setBorderColor(const QString &borderColor);
//设置边框圆角角度
void setBorderRadius(int borderRadius);
};
#endif // IPADDRESS_H

23
ipaddress/ipaddress.pro Normal file
View File

@ -0,0 +1,23 @@
#-------------------------------------------------
#
# Project created by QtCreator 2017-08-10T17:11:52
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = ipaddress
TEMPLATE = app
DESTDIR = $$PWD/../bin
CONFIG += warn_off
SOURCES += main.cpp
SOURCES += frmipaddress.cpp
SOURCES += ipaddress.cpp
HEADERS += frmipaddress.h
HEADERS += ipaddress.h
FORMS += frmipaddress.ui

28
ipaddress/main.cpp Normal file
View File

@ -0,0 +1,28 @@
#include "frmipaddress.h"
#include <QApplication>
#include <QTextCodec>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
a.setFont(QFont("Microsoft Yahei", 9));
#if (QT_VERSION <= QT_VERSION_CHECK(5,0,0))
#if _MSC_VER
QTextCodec *codec = QTextCodec::codecForName("gbk");
#else
QTextCodec *codec = QTextCodec::codecForName("utf-8");
#endif
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec);
#else
QTextCodec *codec = QTextCodec::codecForName("utf-8");
QTextCodec::setCodecForLocale(codec);
#endif
frmIPAddress w;
w.show();
return a.exec();
}