月度归档:2022年03月

转:电话号码正则

正则表达式如下:
^1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$

目前匹配号段

中国电信号段
133、149、153、173、177、180、181、189、199
中国联通号段
130、131、132、145、155、156、166、175、176、185、186

中国移动号段
134(0-8)、135、136、137、138、139、147、150、151、152、157、158、159、178、182、183、184、187、188、198

其他号段
14号段以前为上网卡专属号段,如中国联通的是145,中国移动的是147等等。

虚拟运营商

电信:1700、1701、1702

移动:1703、1705、1706

联通:1704、1707、1708、1709、171

Qt执行带管道的命令差异

在Window中执行管道命令时,由于双引号或参数分割或合并的原因是无法执行的,例如以下这条命令:
cmd.exe /c netstat -ano|find “80”|find “62499”
也正因为Window的差异,故Qt提供了一个特殊函数:void QProcess::setNativeArguments(const QString &arguments)
具体执行如下:

#if defined(Q_OS_WIN)
    QString cmd = QString("/c netstat -ano|find \"80\"|find \"%1\"").arg(port);
    qDebug() << "onConnected" << cmd;
    proc->setNativeArguments(cmd);
    proc->start("cmd.exe");
#elif defined(Q_OS_MAC)
    QStringList args;
    args << "-c" << QString("netstat -nat|grep %1|grep 80").arg(port);
    proc->start("/bin/bash", args);
#else
    QStringList args;
    args << "-c" << QString("netstat -ntp|grep %1|grep 80").arg(port);
    proc->start("/bin/bash", args);
#endif

Fix qt5_generate_repc BUG

macro(qt5_generate_myrepc outfiles infile outputtype)
    # get include dirs and flags
    get_filename_component(abs_infile ${infile} ABSOLUTE)
    get_filename_component(infile_name "${infile}" NAME)
    string(REPLACE ".rep" "" _infile_base ${infile_name})
    if(${outputtype} STREQUAL "SOURCE")
        set(_outfile_base "rep_${_infile_base}_source")
        set(_repc_args -o source)
    elseif(${outputtype} STREQUAL "MERGED")
            set(_outfile_base "rep_${_infile_base}_merged")
            set(_repc_args -o merged)
    else()
        set(_outfile_base "rep_${_infile_base}_replica")
        set(_repc_args -o replica)
    endif()
    set(_outfile_header "${CMAKE_CURRENT_BINARY_DIR}/${_outfile_base}.h")
    add_custom_command(OUTPUT ${_outfile_header}
        DEPENDS ${abs_infile}
        COMMAND ${Qt5RemoteObjects_REPC_EXECUTABLE} ${abs_infile} ${_repc_args} ${_outfile_header}
        VERBATIM)
    set_source_files_properties(${_outfile_header} PROPERTIES GENERATED TRUE)

    qt5_get_moc_flags(_moc_flags)
    # Make sure we get the compiler flags from the Qt5::RemoteObjects target (for includes)
    # (code adapted from QT5_GET_MOC_FLAGS)
    foreach(_current ${Qt5RemoteObjects_INCLUDE_DIRS})
        if("${_current}" MATCHES "\\.framework/?$")
            string(REGEX REPLACE "/[^/]+\\.framework" "" framework_path "${_current}")
            set(_moc_flags ${_moc_flags} "-F${framework_path}")
        else()
            set(_moc_flags ${_moc_flags} "-I${_current}")
        endif()
    endforeach()

    set(_moc_outfile "${CMAKE_CURRENT_BINARY_DIR}/moc_${_outfile_base}.cpp")
    qt5_create_moc_command(${_outfile_header} ${_moc_outfile} "${_moc_flags}" "" "" "")
    list(APPEND ${outfiles} "${_outfile_header}" ${_moc_outfile})
endmacro()

qt5_generate_repc是不支持MERGED特性的,但命令行是已经支持了。故自定议qt5_generate_myrepc函数。

https://doc.qt.io/qt-5/qtremoteobjects-repc.html

linux keycode less and greater

字符串为 < 和 > 在以前的键盘中,映射方式是不一样的。因此可能需要重新设备键位,解决不一致的问题。在老的键盘中,<和>两个字符是在同一个键上的,故在XDisplay中容易出现输入<却显示>的奇怪问题。
xmodmap -e ‘keycode 94 = comma less’