Qt漂亮界面

2023-11-13


原文链接:
https://blog.csdn.net/kissgoodbye2012/article/details/120404744?spm=1001.2101.3001.6650.13&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-13.pc_relevant_antiscanv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-13.pc_relevant_antiscanv2&utm_relevant_index=22

要做一个类似下面的qt界面,顶部是导航栏的样子——包含图标和程序名称,右边是界面切换按钮,然后放大、缩小和关闭按钮也在,还能拖动。这样,就更像一个商用的软件了。
在这里插入图片描述

功能规划:

1.去掉菜单栏、工具栏;
2.顶部导航栏包含程序图标、名称、界面切换按钮、放大缩小关闭按钮;
3.顶部导航栏可以拖动;
4.导航栏按钮可以切换界面。

可以参考的相关博客链接

一、去掉菜单栏和工具栏

在UI设计界面,在menuBar和mainToolBar上右键,选择移除菜单栏和移除工具栏。
在这里插入图片描述
把顶部的图标和程序名称、放大缩小关闭按钮都去掉,使用如下语句。

this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint);

二、顶部导航栏的设计

主要是用installEventFilter来实现的。参考第6章节。
这个顶部导航栏是通过注册监听事件,让app监控所有的程序事件。如果属性是可移动的,然后记录鼠标的坐标等,来控制窗口的位置和大小。

appinit.h头文件

#ifndef APPINIT_H
#define APPINIT_H

#include <QObject>

class AppInit : public QObject
{
    Q_OBJECT
public:
    static AppInit *Instance();
    explicit AppInit(QObject *parent = 0);    

    void start();

protected:
    bool eventFilter(QObject *obj, QEvent *evt);

private:
    static AppInit *self;

signals:

public slots:
};

#endif // APPINIT_H

appinit.cpp的文件

#include "appinit.h"
#include "qmutex.h"
#include "qapplication.h"
#include "qevent.h"
#include "qwidget.h"

AppInit *AppInit::self = 0;
AppInit *AppInit::Instance()
{
    if (!self) {
        QMutex mutex;
        QMutexLocker locker(&mutex);
        if (!self) {
            self = new AppInit;
        }
    }

    return self;
}

AppInit::AppInit(QObject *parent) : QObject(parent)
{
}

bool AppInit::eventFilter(QObject *obj, QEvent *evt)
{
    QWidget *w = (QWidget *)obj;
    //如果窗口w的属性“canMove"是假的,继续监听
    if (!w->property("canMove").toBool()) {
        return QObject::eventFilter(obj, evt);
    }

    //如果属性是可移动
    static QPoint mousePoint;
    static bool mousePressed = false;

    //获取鼠标事件
    QMouseEvent *event = static_cast<QMouseEvent *>(evt);
    if (event->type() == QEvent::MouseButtonPress) {
        //如果鼠标被按下,且是左键按下
        if (event->button() == Qt::LeftButton) {
            mousePressed = true;
            //记下当前坐标:全局坐标-窗口坐标
            mousePoint = event->globalPos() - w->pos();
            return true;
        }
        //如果鼠标松开
    } else if (event->type() == QEvent::MouseButtonRelease) {
        mousePressed = false;
        return true;
        //如果鼠标在移动
    } else if (event->type() == QEvent::MouseMove) {
        if (mousePressed && (event->buttons() && Qt::LeftButton)) {
            //移动当前窗口到某个位置
            w->move(event->globalPos() - mousePoint);
            return true;
        }
    }

    return QObject::eventFilter(obj, evt);
}

void AppInit::start()
{
    qApp->installEventFilter(this);
}

使用方式:

//函数功能:让自定义的顶部导航栏可以拖动
    AppInit::Instance()->start();

三、阵列按钮的点击事件写法

当我们有一排按钮需要程序来添加点击事件时,如果一个个connect那么代码就太长了,connect需要写,它们的槽函数又要单独写,而这些按钮响应的事件处理又差不多。那么可以用如下的写法,立马让你成为QT中级程序员的感觉。
在这里插入图片描述
使用findChildren函数找到某个widget下所有的按钮,如下面代码所示。

//设置顶部导航按钮
    QList<QToolButton *> tbtns = ui->widgetTop->findChildren<QToolButton *>();
    foreach (QToolButton *btn, tbtns) {
        btn->setIconSize(icoSize);
        btn->setMinimumWidth(icoWidth);
        btn->setCheckable(true);
        connect(btn, SIGNAL(clicked()), this, SLOT(buttonClick()));
    }

首先,findChildren函数找到了widgetTop下的所有QToolButton类型按钮。
然后,给每一个按钮设置图标尺寸,宽度和可选择属性,然后连接connect到buttonClick()槽函数。
槽函数代码如下:

void UIDemo01::buttonClick()
{
    QToolButton *b = (QToolButton *)sender();
    //获取当前点击事件按钮的名称
    QString name = b->text();

    QList<QToolButton *> tbtns = ui->widgetTop->findChildren<QToolButton *>();
    foreach (QToolButton *btn, tbtns) {
        if (btn == b) {
            //如果是当前点击事件的按钮,将其设为选中状态
            btn->setChecked(true);
        } else {
            //如果不是当前点击事件的按钮,将其设为未选中状态
            btn->setChecked(false);
        }
    }

    if (name == "主界面") {
        ui->stackedWidget->setCurrentIndex(0);
    } else if (name == "系统设置") {
        ui->stackedWidget->setCurrentIndex(1);
    } else if (name == "警情查询") {
        ui->stackedWidget->setCurrentIndex(2);
    } else if (name == "调试帮助") {
        ui->stackedWidget->setCurrentIndex(3);
    } else if (name == "用户退出") {
        //退出程序
        exit(0);
    }
}

这个槽函数,首先使用sender()函数获得了发生点击事件的那个QToolButton类型按钮的句柄。
然后,将其设为选中状态,将其他的按钮设为未选中状态;
最后,根据按钮的名称来选择跳转到的主界面。

四、重写缩写界面、放大界面和关闭程序事件

首先,在.h文件中注册这些函数

private slots:
    void on_btnMenu_Min_clicked();
    void on_btnMenu_Max_clicked();
    void on_btnMenu_Close_clicked();

然后,直接重写这些函数即可。

void UIDemo01::on_btnMenu_Min_clicked()
{
    //qt自带函数
    showMinimized();
}

void UIDemo01::on_btnMenu_Max_clicked()
{
    //静态定义变量,只在第一次使用
    static bool max = false;
    //静态定义变量获得尺寸
    static QRect location = this->geometry();

    //记忆放大前的窗口尺寸,方便取消最大化时返回原位置和大小
    if (max) {
        this->setGeometry(location);
    } else {
        //保存当前的窗口尺寸
        location = this->geometry();
        //设置界面可达的最大尺寸
        this->setGeometry(qApp->desktop()->availableGeometry());
    }

    //最大化就不能移动了
    this->setProperty("canMove", max);
    max = !max;
}

void UIDemo01::on_btnMenu_Close_clicked()
{
    //qt自带函数
    close();
}

五、鼠标事件的处理

有时我们需要捕获某个控件上的鼠标事件,比如这个界面在导航栏双击可以最大化和取消最大化。
首先,在.h文件中注册bool eventFilter(QObject *watched, QEvent *event);函数

protected:
    bool eventFilter(QObject *watched, QEvent *event);

然后,给需要捕获鼠标事件的控件添加鼠标事件注册

ui->widgetTitle->installEventFilter(this);//顶部导航栏注册鼠标事件

最后,在鼠标事件中编写处理程序

bool UIDemo01::eventFilter(QObject *watched, QEvent *event)
{
    //如果是鼠标双击事件
    if (event->type() == QEvent::MouseButtonDblClick) {
        //如果发生的控件是 ui->widgetTitle
        if (watched == ui->widgetTitle) {
            //调用发生最大化的函数
            on_btnMenu_Max_clicked();
            return true;
        }
    }

    //我们处理了点击事件,把事件返回到上层,让它们继续处理其他事件
    return QWidget::eventFilter(watched, event);
}

六、installEventFilter的使用
installEventFilter的使用参考
简述:
事件过滤器,可以实现一个QObject监视另一个QObject的所有事件,但是两个QObject必须在同一个线程内

使用:
被监视者(ui->widge)安装事件过滤器

 ui->widget->installEventFilter(this);

在监视者(this)里重新实现eventFilter()函数,此函数返回false时,表示监视者(this)不过滤此事件,事件将会继续发送到被监视者(ui->widge);返回true时表示监视者过滤此事件,事件将不会发送到被监视者。

bool CustomerSwitchet::eventFilter(QObject *obj,QEvent *e)
{
    QWidget*wid = qobject_cast<QWidget*>(obj);
    if(wid==ui->widget)
    {
    	//根据事件类型,写处理逻辑
       qDebug()<<"widget";
    }
    return  false;
}

Qt大量同类控件的操作

https://blog.csdn.net/kissgoodbye2012/article/details/121725580
当前,我需要解决如下的一个问题:
有一个曲线图,包含有1条显性主曲线和31条隐性类正态分布曲线(所谓的显性和隐性,指的是曲线是一直显示的,还是在拖动它的控制点时才显示)。显性主曲线是31条隐性类正态分布曲线之和。每条类正态分布曲线有3个控制点,控制点可以拖动,这3个控制点代表这条类正态分布曲线曲线的中心频率、Q值和增益。
如果离散的分别进行操作,虽然也能实现功能,但所有东西都是搅在一起的,且代码量肯定很大。这里使用一个类来理清关系。

正则表达式的设计

https://blog.csdn.net/kissgoodbye2012/article/details/121938706

正则表达式是用于描述符合某些复杂规则的字符串的工具,也就是用来匹配字符串的。


Qt 手把手教你实现漂亮的登录界面


原文链接:https://blog.csdn.net/qq_16488989/article/details/108884580

前言

最近在使用Qt5,Qt Creator做一个管理系统类的项目,自然需要用到登录界面,故记录一下登录界面的制作。其中一些功能的实现也得益于之前Qt5基础视频不规则窗口部分的学习。

一、手把手教你实现漂亮的登录界面

首先看一下成品。
在这里插入图片描述

第一步、新建一个Qwidget项目

没必要用qmainwindow,不需要那些菜单,一般用qwidget就可以,注意勾选ui。
在这里插入图片描述

第二步、添加界面组件

1、添加容器
在这里插入图片描述
调整容器为合适大小,同时调整整个画布为合适大小。
在这里插入图片描述
2、添加按钮,标签,文字组件
构思:
账号密码部分使用Input Widgets:Line Edit
Logo和忘记密码使用两个Display Widgets:TextLabel
是否记住我选择一个Buttons:CheckBox
登录按钮使用Buttons:PushButton

在这里插入图片描述

3、修改组件名称
首先修改Line Edit默认文本属性,分别点击两个LineEdit修改文本属性为Username和Password。
在这里插入图片描述
然后其他的按钮文本标签直接双击修改名称即可。
在这里插入图片描述
以上两步之后,可以得到这个样子(这里统一在Wighets右边的菜单里修改过字体,一会可以通过样式表统一去改)。
在这里插入图片描述
4、添加样式表
类似于css,Qt具有Qss,最为关键的一步就是添加样式表。在Frame容器外 画布内 右键改变样式表,输入以下代码。

*{
background:rgb(255, 255, 255);
font-size:15px;
font-style:MingLiU-ExtB;
}
QFrame{
border:sold 10px rgba(0,0,0);
background-image:url(H:/GUI_design/day04/image/Login_Blue5);//背景
}
QLineEdit{
color:#8d98a1;
background-color:#405361;
font-size:16px;
border-style:outset;
border-radius:10px;
font-style:MingLiU-ExtB;
}
QPushButton{
background:#ced1d8;
border-style:outset;
border-radius:10px;
font-style:MingLiU-ExtB;
}
QPushButton:pressed{
background-color:rgb(224,0,0);
border-style:inset;
font-style:MingLiU-ExtB;
}
QCheckBox{
background:rgba(85,170,255,0);
color:white;
font-style:MingLiU-ExtB;
}
QLabel{
background:rgba(85,170,255,0);
color:white;
font-style:MingLiU-ExtB;
font-size:14px;
}

背景部分找“度娘”就可以。
在这里插入图片描述
应用样式表后展示。
在这里插入图片描述

第三步、实现最小化窗口和关闭窗口功能

1、添加最小化和关闭窗口按钮
按钮选择Buttons:Tool Button,最小化采用-,关闭窗口采用x。
在这里插入图片描述
2、按钮转到槽
将两个按钮都转到槽。
在这里插入图片描述
3、代码示例
转到槽之后,只需要在相应的函数里添加close()和showMinimized()功能即可。具体的代码如下。

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_toolButton_clicked();

    void on_toolButton_2_clicked();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

main.cpp

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

//核心代码就这几行
void Widget::on_toolButton_clicked()
{
    close();
}

void Widget::on_toolButton_2_clicked()
{
    showMinimized();
}

调整画布到合适大小
在这里插入图片描述

展示如下:

在这里插入图片描述
这个时候我们还需要把Widget自带的上边框去掉,并且去掉背景。

第四步、隐藏widget窗口边框和背景

widget.cpp文件中添加如下两句代码即可。

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //去窗口边框
        setWindowFlags(Qt::FramelessWindowHint | windowFlags());

    //把窗口背景设置为透明;
        setAttribute(Qt::WA_TranslucentBackground);
}

第五步、实现界面可移动

需要添加一个鼠标移动和鼠标按下事件。以*e来获取鼠标移动或按下。
main.cpp

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

protected:

    void mouseMoveEvent(QMouseEvent *e);//鼠标移动
    void mousePressEvent(QMouseEvent *e);//鼠标按下移动

private slots:
    void on_close_clicked();

    void on_minimized_clicked();


private:
    Ui::Widget *ui;

     QPoint p;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QPainter>
#include <QMouseEvent>


Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //去窗口边框
        setWindowFlags(Qt::FramelessWindowHint | windowFlags());

    //把窗口背景设置为透明;
        setAttribute(Qt::WA_TranslucentBackground);

}

Widget::~Widget()
{
    delete ui;
}


void Widget::mousePressEvent(QMouseEvent *e)
{
    if(e->button() == Qt::LeftButton)
    {
        //求坐标差值
        //当前点击坐标-窗口左上角坐标
        p = e->globalPos() - this->frameGeometry().topLeft();
    }
}

void Widget::mouseMoveEvent(QMouseEvent *e)
{
    if(e->buttons() & Qt::LeftButton)
    {
        //移到左上角
        move(e->globalPos() - p);
    }

}

void Widget::on_close_clicked()
{
    close();
}
void Widget::on_minimized_clicked()
{
    showMinimized();
}

Qt之QWidget设置窗口背景图片的几种方法

原文链接:https://blog.csdn.net/wangbaba_1/article/details/113648465

使用间接的方式来设置背景

比如说在窗口上覆盖一个QLabel,这个label始终与窗口一样大。然后在label中设置图片,视觉效果上和直接给窗口设置背景图片一样。

Widget::Widget(QWidget *parent) :
	QWidget(parent)
{
	m_lblBg = new QLabel(this);
	m_lblBg ->setPixmap(QPixmap(":/bg.jpg"));
	m_lblBg ->setScaledContents(true);
}
void Widget::resizeEvent(QResizeEvent * ev)
{
	m_lblBg->resize(this->size());
}

创建一个label作为Widget的子窗口,然后设置图片。通过在Widget的resizeEvent事件中设置label的大小与Widget一致。这里需要注意调用QLabel的setScaledContents(true),否则效果和第一种一样。由于QLabel可以用来显示动图因此使用这种方式可以实现窗口的动态背景图片。

由于QLabel可以用来显示动图因此使用这种方式可以实现窗口的动态背景图片。

QToolButton 工具按钮

原文链接:https://blog.csdn.net/wangxiaobei2017/article/details/77824938

工具按钮(QToolButton)区别于普通按钮(QPushButton)的一点是,工具按钮(QToolButton)可以带图标,他们两个有同一个父类(QAbstractButton);
工具按钮(QToolButton)有两部分组成:文本text 和 图标icon(建议用png格式的图片)

之后,在QAbstractButton属性选项中的icon下加载图标资源,在text 中修改工具按钮的文本“帮助”。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参考连接

qt 如何设计好布局和漂亮的界面

QT-通用的软件界面框架,好看且实用

Qt界面开发(一)(各种控件以及图表)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt漂亮界面 的相关文章

  • 在 MVC 类上创建主键字段

    我是 MVC 和 C 新手 我只是偶然发现它并发现它很有趣 我遇到了一个不允许我继续的问题 这是我的代码 using System using System Collections Generic using System Linq usi
  • C++ - 模板专业化和部分专业化

    我一直在互联网和 stackoverflow 上寻找具体的答案 但我似乎找不到 我必须创建一个通用类 然后实现特定的功能 我的具体说明是 您需要使用模板表达式参数以及模板类专业化和部分专业化 我有一个模板类 template
  • 为什么 LinkedList 通常比 List 慢?

    我开始在我的一些 C 算法中使用一些 LinkedList 而不是列表 希望能够加快速度 然而 我注意到他们只是感觉更慢 像任何优秀的开发人员一样 我认为我应该尽职调查并验证我的感受 所以我决定对一些简单的循环进行基准测试 我认为用一些随机
  • C++:获取注册表值仅给出第一个字符[重复]

    这个问题在这里已经有答案了 我试图从注册表中获取字符串值 但我只得到第一个字母 HKEY hKey char gamePath MAX PATH if RegOpenKeyEx HKEY CURRENT USER L Software Bl
  • 使用 QSet 作为 Qt 地图容器中的键

    我需要一个映射 其中键是唯一的 并且每个键都是一组或自定义 POD 结构 其中包含 3 个数据项 这些值只是指向对象实例的指针 从阅读Qt 的 QMap 与 QHash 的文档 http qt project org doc qt 4 8
  • 将语句插入 SQL Server 数据库

    最近几天我试图找到这个错误 但没有成功 我正在尝试在数据库中插入一个新行 一切都很顺利 没有错误 也没有程序崩溃 My INSERT声明如下 INSERT INTO Polozaj Znesek Uporabnik Cas Kupec Po
  • C++ 模板参数类型推断

    我有一个这样的C 模板 template
  • 从 ef core 的子集合中删除一些项目

    我有一个父表和子表 其中父表与子表具有一对多关系 我想删除一些子项 并且希望父项的子集合反映该更改 如果我使用删除选定的子项RemoveRange 那么子集合不会更新 如果我使用Remove从子集合中删除子集合然后 显然 它不如使用效率高R
  • 基于 C++ 范围的 for 循环

    尝试使用基于范围的 for 循环执行某些操作 可以使用常规的 for 循环来完成 如下所示 vector
  • 如何使用 C# 代码使用超链接的 onClick 事件?

    我正在尝试为页面中的超链接添加条件 而不是仅仅使用特定的链接 例如 a href help Tutorial html Tutorial a 我想为不同的用户显示不同的页面 例如 如果用户以管理员身份登录 他们将看到与普通用户不同的链接 我
  • 使用 cudamalloc()。为什么是双指针?

    我目前正在浏览有关的教程示例http code google com p stanford cs193g sp2010 http code google com p stanford cs193g sp2010 学习CUDA 演示的代码 g
  • 从存储过程返回 int 值并在 ASP.NET 代码中检查它以验证登录表单

    当我多次尝试但没有得到有效结果时 使此代码运行的真实顺序是什么 SQL存储过程的代码 set ANSI NULLS ON set QUOTED IDENTIFIER ON GO ALTER PROC dbo login proc usern
  • 函数模板重载解析期间的 MSVC 与 Clang/GCC 错误,其中一个函数模板包含参数包

    当我使用参数包时 我注意到这样一种情况 如下所示 在 gcc 和 clang 中编译得很好 但在 msvc 中却不行 template
  • 向每个收件人发送一封包含不同内容的电子邮件(使用抄送字段)

    在你因为这个问题 毫无意义 和 不可能 而驳回之前 请听我说完 问题 我们在使用我们的系统发送的每封电子邮件中实施跟踪像素 即具有唯一 URL 的可下载 GIF 文件 这有助于我们跟踪电子邮件的打开情况 问题是 当我们抄送一些收件人时 跟踪
  • 统一;随机物体移动[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在制作一款机器人战斗游戏 我希望敌人随机移动 然后有时会向敌人移动 我希望运动包含在其中的代码 else if avoid fal
  • C 中的静态和动态绑定(严格来说是 C,而不是 C++)是什么?

    我最初对发布这个问题感到担忧 以免它重复 但即使在谷歌搜索了许多关键字之后 我在 StackOverflow 上找不到任何解释 C 的静态和动态绑定的链接 尽管有 C 的问题和答案 但是都涉及classes以及显然不适合 C 的东西 Sta
  • Crypto++ 和压缩 EC 密钥

    如何在 Crypto 中生成压缩的 ECDSA 密钥 AutoSeededRandomPool prng ECDSA
  • 计算两个日期之间的工作日数?

    在C 中 如何计算business 或工作日 两个日期之间的天数 我以前曾经遇到过这样的任务 并且我已经找到了解决方案 当可以避免的时候 我会避免列举其间的所有日子 这里就是这种情况 正如我在上面的一个答案中看到的那样 我什至没有提到创建一
  • 如何设置 Swashbuckle 与 Microsoft.AspNetCore.Mvc.Versioning

    我们有asp net core webapi 我们添加了Microsoft AspNetCore Mvc Versioning and Swashbuckle拥有招摇的用户界面 我们将控制器指定为 ApiVersion 1 0 Route
  • XmlDocument Save 使文件保持打开状态

    我有一个简单的 C 函数 可以创建一个基本的 XML 文件并保存 private void CreateXMlFile string Filename string Name string Company XmlDocument doc n

随机推荐

  • 谷粒商城 高级篇 (二) --------- ElasticSearch 检索

    目录 一 初步检索 1 cat 2 索引一个文档 保存 3 查询文档 4 更新文档 5 删除文档 索引 6 bulk 批量 API 7 样本测试数据 二 进阶检索 1 SearchAPI 2 Query DSL 3 Mapping 创建映射
  • 总结:整理 oracle异常错误处理

    5 1 异常处理概念 5 1 1 预定义的异常处理 5 1 2 非预定义的异常处理 5 1 3 用户自定义的异常处理 5 1 4 用户定义的异常处理 5 2 异常错误传播 5 2 1 在执行部分引发异常错误 5 2 2 在声明部分引发异常错
  • SGI STL 第二级空间配置器 内存池

    从内存池中取控件给free list 使用 是chunk alloc的工作 template
  • 程序设计的基本方法

    IPO模式 输入 处理 算法 是程序的灵魂 输出 问题的计算部分 程序编写步骤 分析问题 确定问题 设计算法 编写实现 调试测试 升级维护 编程技巧之流程图 我们写的程序都是有逻辑顺序的 即是有流程的 流程图的作用则是对这种逻辑顺序的一种描
  • jQuery选择器、特殊选择器、筛选器

    一 选择器 ul li class a 1 li li class a 2 li li class b 3 li li class c 4 li li class abc 5 li li li li li ul 1 获取页面中所有的ul标签
  • 颜色代码对照表

    各颜色代码 1 白色 FFFFFF 2 红色 FF0000 3 绿色 00FF00 4 蓝色 0000FF 5 牡丹红 FF00FF 6 青色 00FFFF 7 黄色 FFFF00 8 黑色 000000 9 海蓝 70DB93 10 巧克
  • 使用selenium实现自动登录

    from selenium import webdriver import time driver webdriver Chrome 打开登录页面 url为要打开的地址 driver get url 最大化浏览器 driver maximi
  • 域名系统几类服务器,域名系统

    域名系统 编辑 定义 域名系统 简称为DNS Domain Name System 是因特网使用的命名系统 用来便于人们使用的机器名字转换为IP地址 域名系统其实也称为名字系统 只是更明确地指明这种系统是用在因特网中 域名系统的主要特点是在
  • HTTP请求接口方法(POST/GET)

    private static string HttpPost string Url string postDataStr HttpWebRequest request HttpWebRequest WebRequest Create Url
  • 【Python】matplotlib画散点图,并根据目标列的类别来设置颜色区间(含源代码及参数解释)

    最近在进行绘图时 遇到了matplotlib画散点图 并根据目标列的类别来设置颜色区间的问题 但是实现的过程较为艰辛 文章目录 一 数据准备 二 第一次尝试 失败及其原因 2 1 失败 2 2 原因 三 第二次尝试 成功 四 总结 plt
  • Nginx 重写功能(location / rewrite)

    这里写自定义目录标题 一 nginx rewrite概述 1 概述 2 Rewrite跳转场景 3 Rewrite跳转实现 4 Rewrite实际场景 二 Nginx常见模块 三 常见的Nginx正则表达式 1 正则的优势 2 正则的作用
  • shell 多个引号冲突_请教Linux shell命令中双引号与单引号嵌套的问题

    addr 192 168 0 111 echo addr 结果为 192 168 0 111 echo addr 结果为 addr 这两个我还可以理解 1 双引号内的单引号功能被关闭 反之亦然 2 双引号内的 功能被保留 单引号 addr
  • fatal: Authentication failed for ‘https://github.com

    记录在本地电脑建立与GitHub连接时遇到的错误 附上解决方案 git clone 遇到的错误 remote Support for password authentication was removed on August 13 2021
  • osx 常用defaults命令

    defaults命令用来对mac os x系统进行某些设置 常用命令 查看所使用的defaults命令 history grep defaults 分类查看defaults命令 history grep defaults write his
  • JavaScript数据结构——字典(Dictionary)

    概念和结构 字典里面的元素都是一个键 key 值 value 对 字典里面的元素的键 key 不能重复 值 value 可以重复 字典的操作 字典有八种常用操作 分别为 检查键是否存在 has key 添加元素 set key value
  • js 搜索模糊匹配

    searchvalue list keyWord if keyWord var reg new RegExp keyWord var arr for var i 0 i lt list length i if reg test list i
  • Java8-对List转换Map、分组、求和、过滤

    前言 在java8之后我们list转map再也不用循环put到map了 我们用lambda表达式 使用stream可以一行代码解决 下面我来简单介绍list转map的几种方式 和转为map后对map进行分组 求和 过滤等操作 正文 数据准备
  • C#实现百度地图附近搜索&调用JavaScript函数

    前一篇文章 C 调用百度地图API入门 解决BMap未定义问题 讲述了如何通过C 调用百度API显示地图 并且如何解决BMap未定义的问题 这篇文章主要更加详细的介绍百度地图的一些功能 包括附近搜索 城市搜索 路线规划 添加覆盖物等等 希望
  • ipv6的链路本地地址

    目录 简介 先决条件 要求 使用的组件 规则 配置 网络图 配置 验证 检验 OSPF 的配置 正在验证的链路本地地址可接通性 ping从远程网络的链路本地地址 直接ping从连接的网络的链路本地地址 相关信息 简介 本文目的将提供对在网络
  • Qt漂亮界面

    Qt漂亮界面 功能规划 一 去掉菜单栏和工具栏 二 顶部导航栏的设计 appinit h头文件 appinit cpp的文件 使用方式 三 阵列按钮的点击事件写法 四 重写缩写界面 放大界面和关闭程序事件 五 鼠标事件的处理 Qt大量同类控