文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Qt界面美化之怎么自定义qss样式表

2023-07-05 09:41

关注

本篇内容介绍了“Qt界面美化之怎么自定义qss样式表”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、新建qrc文件,添加和保存资源文件

首先新建个qrc资源文件,使用Qtcreater的话可以直接在菜单中找新建->资源文件(qrc)。当然这个文件也可以手工创建。文件内容如下image.qrc:

<RCC>    <qresource prefix="/">        <file>qss/gray.css</file>        <file>image/shutdownicon.png</file>        <file>image/shutdownlogo.png</file>        <file>image/shutdownpushbutton.png</file>        <file>image/shutdownpushbuttonpress.png</file>        <file>image/spinner.png</file>        <file>image/tips.png</file>        <file>image/calendar.png</file>    </qresource></RCC>

在根目录里创建一个qss文件夹,里面创建全局样式表css文件。(建议这么搞,样式都统一放到样式表文件里,方便后续修改。不建议直接在界面上使用QtDesigner去改样式。)

二、新建css样式表文件

style.css样式文件内容如下:

QPalette{background:#e5e5e5;} QLabel,QLineEdit,QTextEdit,QPlainTextEdit,QGroupBox,QComboBox,QDateEdit,QTimeEdit,QDateTimeEdit,QTreeView,QListView,QTableView, QLineEdit,QTextEdit,QPlainTextEdit { } QLabel#image1{    } QLabel#text1{    color: #004695;    font: 75 18pt "微软雅黑";} QLineEdit[echoMode="2"] {    lineedit-password-character: 9679;} .QGroupBox {    border: 1px solid #A9A9A9;    border-radius: 5px;} .QPushButton {    border-style: none;    border: 1px solid #A9A9A9;    color: #FFFFFF;    padding: 5px;            border-radius: 40px;    background: rgb(46,118,199);} .QPushButton:hover {    background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgb(46,118,199), stop:1 #C1C1C1);} .QPushButton:pressed {    background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 #004695, stop:1 #004695);}  .QPushButton:disabled {    color: #838383;    background: #F4F4F4;} .QPushButton#btnShutDown {    background-image: url(:/image/shutdownicon.png);    background-position: left;    background-repeat: no-repeat;    background-origin:content;    padding-left:90px;    text-align: right;    padding-right:120px;    font: 25 20pt "Microsoft YaHei"; } .QPushButton#btnShutDown:pressed {    background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 #004695, stop:1 #004695);} QCheckBox {    color: #000000;    spacing: 2px;} QCheckBox::indicator {    width: 20px;    height: 20px;}  QRadioButton {    color: #000000;    spacing: 2px;} QComboBox {            border-radius: 5px;} QSpinBox {    border-radius: 5px;}

style.css文件内容解释,有点css基础的应该很容易看懂。最前面的一系列是统一设置控件的样式。

QLabel#image1{    } QLabel#text1{    color: #004695;    font: 75 18pt "微软雅黑";}

这里的#后面跟的内容,就是你界面里指定的控件对象名称,如image1,text1等。

.QPushButton#btnShutDown:pressed {    background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 #004695, stop:1 #004695);}

以上的:pressed设置按钮按下时的样式,hover是鼠标悬停上面的样式。

设置按钮的背景图片,关键属性:

background-position  -----  设置图标的位置

text-align-------------设置文本的位置            

background-origin-------------相对于内容框来定位背景图像

如何使用

在mainWindow窗口实例化的地方,全局加载即可。

        //设置指定样式        static void setStyle(const QString &qssFile) {        QFile file(qssFile);        if (file.open(QFile::ReadOnly)) {            QString qss = QLatin1String(file.readAll());            qApp->setStyleSheet(qss);            QString PaletteColor = qss.mid(20, 7);            qApp->setPalette(QPalette(QColor(PaletteColor)));            file.close();        }    }
MainWindow::MainWindow(QWidget *parent) :        QWidget(parent), ui(new Ui::MainWindow) {    ui->setupUi(this);    setFixedSize(1280, 1024);    //setWindowFlags(Qt::Window | Qt::FramelessWindowHint);    myHelper::setStyle(":/qss/style.css");}

 整理了一个全局的辅助类,方便使用。 

#ifndef MYHELPER_H#define MYHELPER_H #include <QtCore>#include <QtGui> #if (QT_VERSION > QT_VERSION_CHECK(5, 0, 0)) #include <QtWidgets> #endif class myHelper : public QObject { public:    static void autoRunWithSystem(bool ifAutoRun, QString appName, QString appPath) {        QSettings *reg = new QSettings(                "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat);         if (ifAutoRun) {            reg->setValue(appName, appPath);        } else {            reg->setValue(appName, "");        }    }     //设置编码为UTF8    static void setTextCode(const QString sForName = "UTF-8") {#if (QT_VERSION <= QT_VERSION_CHECK(5, 0, 0))        QTextCodec *codec = QTextCodec::codecForName(sForName);        QTextCodec::setCodecForLocale(codec);        QTextCodec::setCodecForCStrings(codec);        QTextCodec::setCodecForTr(codec);#endif    }      //设置指定样式    static void setStyle(const QString &qssFile) {        QFile file(qssFile);        if (file.open(QFile::ReadOnly)) {            QString qss = QLatin1String(file.readAll());            qApp->setStyleSheet(qss);            QString PaletteColor = qss.mid(20, 7);            qApp->setPalette(QPalette(QColor(PaletteColor)));            file.close();        }    }     //加载中文字符    static void setChinese() {        QTranslator *translator = new QTranslator(qApp);        translator->load(":/image/qt_zh_CN.qm");        qApp->installTranslator(translator);    }     //判断是否是IP地址    static bool isIP(const QString sIP) {        QRegExp RegExp("((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)");        return RegExp.exactMatch(sIP);    }     //延时    static void sleep(int sec) {        QTime dieTime = QTime::currentTime().addMSecs(sec);         while (QTime::currentTime() < dieTime) {            QCoreApplication::processEvents(QEventLoop::AllEvents, 100);        }    }     //延时    static int sleep1(int command, int sec, int *state) {        int ret = 0;        QTime dieTime = QTime::currentTime().addMSecs(sec);         while (QTime::currentTime() < dieTime) {            if (((0xC7 != command && 0xC1 != command) && (*state == 2)) ||                ((0xC7 == command || 0xC1 == command) && (*state == 3))) {                return 1;            }            QCoreApplication::processEvents(QEventLoop::AllEvents, 100);        }        ret = 2;        return ret;    }     //窗体居中显示    static void moveFormToCenter(QWidget *frm) {        int frmX = frm->width();        int frmY = frm->height();         QDesktopWidget dwt;         int deskWidth = dwt.availableGeometry().width();        int deskHeight = dwt.availableGeometry().height();         QPoint movePoint(deskWidth / 2 - frmX / 2, deskHeight / 2 - frmY / 2);        frm->move(movePoint);    }}; #endif // MYHELPER_H

CMakeLists文件

由于习惯了使用cmake,以下附上cmake的QT工程配置,CMakeList.txt文件。

cmake_minimum_required(VERSION 3.21)project(myapp) set(CMAKE_PREFIX_PATH "D:/Qt/Qtxx/xx.xx/msvc20xx/lib/cmake") add_definitions(        -D_ENABLE_LOGGING) ##设置输出目录set(BUILD_DIRECTORY "")set(BUILD_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../build)####################  QT dependencies ########################set(CMAKE_CXX_STANDARD 11)set(CMAKE_AUTOMOC ON)set(CMAKE_AUTORCC ON)set(CMAKE_AUTOUIC ON) set(QT_VERSION 5)set(REQUIRED_LIBS Core Gui Network Widgets)set(REQUIRED_LIBS_QUALIFIED Qt5::Core Qt5::Gui Qt5::Network Qt5::Widgets) ####################  set output directory ####################set(BUILD_DIR ${BUILD_DIRECTORY})set(LIB_DIR ${BUILD_DIR}/lib/Release)set(LIB_FIX)if (CMAKE_BUILD_TYPE MATCHES "Debug")    set(LIB_DIR ${BUILD_DIR}/lib/Debug)    set(LIB_FIX _d)endif () get_filename_component(ABSOLUTE_PATH ${LIB_DIR} ABSOLUTE)set(LIB_DIR ${ABSOLUTE_PATH}) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LIB_DIR})set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${LIB_DIR})set(CMAKE_PDB_OUTPUT_DIRECTORY ${LIB_DIR})set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${LIB_DIR}) set(LIB_DIR_FIX ${LIB_DIR})option(USE_VS_BUILD "use visual studio build." OFF)if (USE_VS_BUILD)    set(LIB_DIR_FIX ${LIB_DIR}/bin/Debug)endif ()####################  set include path ####################include_directories(        ${CMAKE_CURRENT_SOURCE_DIR}/source/cpp/logger        ${CMAKE_CURRENT_SOURCE_DIR}/source/cpp/misc        ${CMAKE_CURRENT_SOURCE_DIR}/source/cpp        ${BUILD_DIR}/include) ####################  scan source files ####################aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/source/cpp/logger SRC_FILES)aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/source/cpp/misc SRC_FILES)aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/source/cpp SRC_FILES) #####设置资源文件set(RESOURCE_SOURCES        image.qrc        )####################  version config ####################if (MSVC)    set(MY_VERSIONINFO_RC "${CMAKE_CURRENT_BINARY_DIR}/VersionInfo.rc")    configure_file("${CMAKE_CURRENT_SOURCE_DIR}/resource.rc.in"            "${MY_VERSIONINFO_RC}")endif () set(MY_VERSIONINFO_RC "") add_executable(${PROJECT_NAME} main.cpp mainwindow.cpp mainwindow.h mainwindow.ui ${SRC_FILES} ${RESOURCE_SOURCES} ${MY_VERSIONINFO_RC}) ####################  set target properties ####################set_target_properties(${PROJECT_NAME} PROPERTIES DEBUG_POSTFIX _d) set_property(TARGET ${PROJECT_NAME} PROPERTY WIN32_EXECUTABLE true) ####################  set target dependencies ####################find_package(Qt${QT_VERSION} COMPONENTS ${REQUIRED_LIBS} REQUIRED)  ###############vcpkg的三方库######################################find_package(g3log CONFIG REQUIRED) ###############三方静态库#########################################set(REDIS_CLIENT_LIB ${LIB_DIR_FIX}/redisclient${LIB_FIX}.lib) set(THIRD_LIBS        g3log        ${REDIS_CLIENT_LIB}        ) target_link_libraries(${PROJECT_NAME} PRIVATE ${REQUIRED_LIBS_QUALIFIED} ${THIRD_LIBS})

“Qt界面美化之怎么自定义qss样式表”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯