日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

qt显示rgba8888 如何改 frame_Qt开源作品17-IP地址输入控件

發布時間:2024/7/19 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 qt显示rgba8888 如何改 frame_Qt开源作品17-IP地址输入控件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、前言

這個IP地址輸入框控件,估計寫爛了,網上隨便一搜索,保證一大堆,估計也是因為這個控件太容易了,非常適合新手練手,一般的思路都是用4個qlineedit控件拼起來,然后每個輸入框設置正則表達式過濾只能輸入3位數字,然后安裝事件過濾器識別回車自動跳到下一個輸入框。關于如何設置正則表達式過濾,這個可以搜索查到,本人也不大懂這個規則,貌似還有專門的書籍專門介紹正則表達式,可能這塊非常強大。

主要功能:

1. 可設置IP地址,自動填入框

2. 可清空IP地址

3. 支持按下小圓點自動切換

4. 支持退格鍵自動切換

5. 支持IP地址過濾

6. 可設置背景色/邊框顏色/邊框圓角角度

二、代碼思路

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); }

三、效果圖

四、開源主頁

以上作品完整源碼下載都在開源主頁,會持續不斷更新作品數量和質量,歡迎各位關注。 1. 國內站點:https://gitee.com/feiyangqingyun/QWidgetDemo 2. 國際站點:https://github.com/feiyangqingyun/QWidgetDemo 3. 個人主頁:https://blog.csdn.net/feiyangqingyun 4. 知乎主頁:https://www.zhihu.com/people/feiyangqingyun/

總結

以上是生活随笔為你收集整理的qt显示rgba8888 如何改 frame_Qt开源作品17-IP地址输入控件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。