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

其他教程   发布日期:2023年08月08日   浏览次数:545

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

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

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

  1. <RCC>
  2. <qresource prefix="/">
  3. <file>qss/gray.css</file>
  4. <file>image/shutdownicon.png</file>
  5. <file>image/shutdownlogo.png</file>
  6. <file>image/shutdownpushbutton.png</file>
  7. <file>image/shutdownpushbuttonpress.png</file>
  8. <file>image/spinner.png</file>
  9. <file>image/tips.png</file>
  10. <file>image/calendar.png</file>
  11. </qresource>
  12. </RCC>

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

二、新建css样式表文件

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

  1. QPalette{background:#e5e5e5;}
  2. QLabel,
  3. QLineEdit,
  4. QTextEdit,
  5. QPlainTextEdit,
  6. QGroupBox,
  7. QComboBox,
  8. QDateEdit,
  9. QTimeEdit,
  10. QDateTimeEdit,
  11. QTreeView,
  12. QListView,
  13. QTableView,
  14. QLineEdit,
  15. QTextEdit,
  16. QPlainTextEdit {
  17. }
  18. QLabel#image1{
  19. /*background-image: url(:/image/shutdownlogo.png);*/
  20. }
  21. QLabel#text1{
  22. color: #004695;
  23. font: 75 18pt "微软雅黑";
  24. }
  25. QLineEdit[echoMode="2"] {
  26. lineedit-password-character: 9679;
  27. }
  28. .QGroupBox {
  29. border: 1px solid #A9A9A9;
  30. border-radius: 5px;
  31. }
  32. .QPushButton {
  33. border-style: none;
  34. border: 1px solid #A9A9A9;
  35. color: #FFFFFF;
  36. padding: 5px;
  37. /* min-height: 20px; */
  38. /* min-width: 30px; */
  39. border-radius: 40px;
  40. background: rgb(46,118,199);
  41. }
  42. .QPushButton:hover {
  43. background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgb(46,118,199), stop:1 #C1C1C1);
  44. }
  45. .QPushButton:pressed {
  46. background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 #004695, stop:1 #004695);
  47. }
  48. .QPushButton:disabled {
  49. color: #838383;
  50. background: #F4F4F4;
  51. }
  52. .QPushButton#btnShutDown {
  53. background-image: url(:/image/shutdownicon.png);
  54. background-position: left;
  55. background-repeat: no-repeat;
  56. background-origin:content;
  57. padding-left:90px;
  58. text-align: right;
  59. padding-right:120px;
  60. font: 25 20pt "Microsoft YaHei";
  61. }
  62. .QPushButton#btnShutDown:pressed {
  63. background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 #004695, stop:1 #004695);
  64. }
  65. QCheckBox {
  66. color: #000000;
  67. spacing: 2px;
  68. }
  69. QCheckBox::indicator {
  70. width: 20px;
  71. height: 20px;
  72. }
  73. QRadioButton {
  74. color: #000000;
  75. spacing: 2px;
  76. }
  77. QComboBox {
  78. /* border-style: none; */
  79. /* border: 1px solid #A9A9A9; */
  80. border-radius: 5px;
  81. }
  82. QSpinBox {
  83. border-radius: 5px;
  84. }

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

  1. QLabel#image1{
  2. /*background-image: url(:/image/shutdownlogo.png);*/
  3. }
  4. QLabel#text1{
  5. color: #004695;
  6. font: 75 18pt "微软雅黑";
  7. }

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

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

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

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

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

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

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

如何使用

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

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

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

  1. #ifndef MYHELPER_H
  2. #define MYHELPER_H
  3. #include <QtCore>
  4. #include <QtGui>
  5. #if (QT_VERSION > QT_VERSION_CHECK(5, 0, 0))
  6. #include <QtWidgets>
  7. #endif
  8. class myHelper : public QObject {
  9. public:
  10. static void autoRunWithSystem(bool ifAutoRun, QString appName, QString appPath) {
  11. QSettings *reg = new QSettings(
  12. "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun", QSettings::NativeFormat);
  13. if (ifAutoRun) {
  14. reg->setValue(appName, appPath);
  15. } else {
  16. reg->setValue(appName, "");
  17. }
  18. }
  19. //设置编码为UTF8
  20. static void setTextCode(const QString sForName = "UTF-8") {
  21. #if (QT_VERSION <= QT_VERSION_CHECK(5, 0, 0))
  22. QTextCodec *codec = QTextCodec::codecForName(sForName);
  23. QTextCodec::setCodecForLocale(codec);
  24. QTextCodec::setCodecForCStrings(codec);
  25. QTextCodec::setCodecForTr(codec);
  26. #endif
  27. }
  28. //设置指定样式
  29. static void setStyle(const QString &qssFile) {
  30. QFile file(qssFile);
  31. if (file.open(QFile::ReadOnly)) {
  32. QString qss = QLatin1String(file.readAll());
  33. qApp->setStyleSheet(qss);
  34. QString PaletteColor = qss.mid(20, 7);
  35. qApp->setPalette(QPalette(QColor(PaletteColor)));
  36. file.close();
  37. }
  38. }
  39. //加载中文字符
  40. static void setChinese() {
  41. QTranslator *translator = new QTranslator(qApp);
  42. translator->load(":/image/qt_zh_CN.qm");
  43. qApp->installTranslator(translator);
  44. }
  45. //判断是否是IP地址
  46. static bool isIP(const QString sIP) {
  47. QRegExp RegExp("((2[0-4]d|25[0-5]|[01]?dd?).){3}(2[0-4]d|25[0-5]|[01]?dd?)");
  48. return RegExp.exactMatch(sIP);
  49. }
  50. //延时
  51. static void sleep(int sec) {
  52. QTime dieTime = QTime::currentTime().addMSecs(sec);
  53. while (QTime::currentTime() < dieTime) {
  54. QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
  55. }
  56. }
  57. //延时
  58. static int sleep1(int command, int sec, int *state) {
  59. int ret = 0;
  60. QTime dieTime = QTime::currentTime().addMSecs(sec);
  61. while (QTime::currentTime() < dieTime) {
  62. if (((0xC7 != command && 0xC1 != command) && (*state == 2)) ||
  63. ((0xC7 == command || 0xC1 == command) && (*state == 3))) {
  64. return 1;
  65. }
  66. QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
  67. }
  68. ret = 2;
  69. return ret;
  70. }
  71. //窗体居中显示
  72. static void moveFormToCenter(QWidget *frm) {
  73. int frmX = frm->width();
  74. int frmY = frm->height();
  75. QDesktopWidget dwt;
  76. int deskWidth = dwt.availableGeometry().width();
  77. int deskHeight = dwt.availableGeometry().height();
  78. QPoint movePoint(deskWidth / 2 - frmX / 2, deskHeight / 2 - frmY / 2);
  79. frm->move(movePoint);
  80. }
  81. };
  82. #endif // MYHELPER_H

CMakeLists文件

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

  1. cmake_minimum_required(VERSION 3.21)
  2. project(myapp)
  3. set(CMAKE_PREFIX_PATH "D:/Qt/Qtxx/xx.xx/msvc20xx/lib/cmake")
  4. add_definitions(
  5. -D_ENABLE_LOGGING
  6. )
  7. ##设置输出目录
  8. set(BUILD_DIRECTORY "")
  9. set(BUILD_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../build)
  10. #################### QT dependencies ########################
  11. set(CMAKE_CXX_STANDARD 11)
  12. set(CMAKE_AUTOMOC ON)
  13. set(CMAKE_AUTORCC ON)
  14. set(CMAKE_AUTOUIC ON)
  15. set(QT_VERSION 5)
  16. set(REQUIRED_LIBS Core Gui Network Widgets)
  17. set(REQUIRED_LIBS_QUALIFIED Qt5::Core Qt5::Gui Qt5::Network Qt5::Widgets)
  18. #################### set output directory ####################
  19. set(BUILD_DIR ${BUILD_DIRECTORY})
  20. set(LIB_DIR ${BUILD_DIR}/lib/Release)
  21. set(LIB_FIX)
  22. if (CMAKE_BUILD_TYPE MATCHES "Debug")
  23. set(LIB_DIR ${BUILD_DIR}/lib/Debug)
  24. set(LIB_FIX _d)
  25. endif ()
  26. get_filename_component(ABSOLUTE_PATH ${LIB_DIR} ABSOLUTE)
  27. set(LIB_DIR ${ABSOLUTE_PATH})
  28. set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LIB_DIR})
  29. set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${LIB_DIR})
  30. set(CMAKE_PDB_OUTPUT_DIRECTORY ${LIB_DIR})
  31. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${LIB_DIR})
  32. set(LIB_DIR_FIX ${LIB_DIR})
  33. option(USE_VS_BUILD "use visual studio build." OFF)
  34. if (USE_VS_BUILD)
  35. set(LIB_DIR_FIX ${LIB_DIR}/bin/Debug)
  36. endif ()
  37. #################### set include path ####################
  38. include_directories(
  39. ${CMAKE_CURRENT_SOURCE_DIR}/source/cpp/logger
  40. ${CMAKE_CURRENT_SOURCE_DIR}/source/cpp/misc
  41. ${CMAKE_CURRENT_SOURCE_DIR}/source/cpp
  42. ${BUILD_DIR}/include
  43. )
  44. #################### scan source files ####################
  45. aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/source/cpp/logger SRC_FILES)
  46. aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/source/cpp/misc SRC_FILES)
  47. aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/source/cpp SRC_FILES)
  48. #####设置资源文件
  49. set(RESOURCE_SOURCES
  50. image.qrc
  51. )
  52. #################### version config ####################
  53. if (MSVC)
  54. set(MY_VERSIONINFO_RC "${CMAKE_CURRENT_BINARY_DIR}/VersionInfo.rc")
  55. configure_file("${CMAKE_CURRENT_SOURCE_DIR}/resource.rc.in"
  56. "${MY_VERSIONINFO_RC}")
  57. endif ()
  58. set(MY_VERSIONINFO_RC "")
  59. add_executable(${PROJECT_NAME} main.cpp mainwindow.cpp mainwindow.h mainwindow.ui ${SRC_FILES} ${RESOURCE_SOURCES} ${MY_VERSIONINFO_RC})
  60. #################### set target properties ####################
  61. set_target_properties(${PROJECT_NAME} PROPERTIES DEBUG_POSTFIX _d)
  62. set_property(TARGET ${PROJECT_NAME} PROPERTY WIN32_EXECUTABLE true)
  63. #################### set target dependencies ####################
  64. find_package(Qt${QT_VERSION} COMPONENTS ${REQUIRED_LIBS} REQUIRED)
  65. ###############vcpkg的三方库######################################
  66. find_package(g3log CONFIG REQUIRED)
  67. ###############三方静态库#########################################
  68. set(REDIS_CLIENT_LIB ${LIB_DIR_FIX}/redisclient${LIB_FIX}.lib)
  69. set(THIRD_LIBS
  70. g3log
  71. ${REDIS_CLIENT_LIB}
  72. )
  73. target_link_libraries(${PROJECT_NAME} PRIVATE ${REQUIRED_LIBS_QUALIFIED} ${THIRD_LIBS})

以上就是Qt界面美化之怎么自定义qss样式表的详细内容,更多关于Qt界面美化之怎么自定义qss样式表的资料请关注九品源码其它相关文章!