Search code examples
cssmenuqt5qt-creatorstyling

QT5 styling QPushButton to remove space around it


I creating simple sliding menu in Qt5 Qt Widgets Application.

All seems work fine and now my form look like this:

my test app form screenshot

When i press button submenu showed and other element slides down.

Here code of the form:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>695</width>
    <height>388</height>
   </rect>
  </property>
  <property name="sizePolicy">
   <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
    <horstretch>0</horstretch>
    <verstretch>0</verstretch>
   </sizepolicy>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <property name="styleSheet">
   <string notr="true"/>
  </property>
  <widget class="QWidget" name="centralwidget">
   <property name="styleSheet">
    <string notr="true">QWidget#centralwidget {
    border-top: 1px solid gray;
}</string>
   </property>
   <layout class="QHBoxLayout" name="horizontalLayout">
    <property name="spacing">
     <number>0</number>
    </property>
    <property name="leftMargin">
     <number>0</number>
    </property>
    <property name="topMargin">
     <number>0</number>
    </property>
    <property name="rightMargin">
     <number>0</number>
    </property>
    <property name="bottomMargin">
     <number>0</number>
    </property>
    <item>
     <widget class="QWidget" name="menuContainerBox" native="true">
      <property name="sizePolicy">
       <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
        <horstretch>0</horstretch>
        <verstretch>0</verstretch>
       </sizepolicy>
      </property>
      <property name="minimumSize">
       <size>
        <width>101</width>
        <height>0</height>
       </size>
      </property>
      <property name="autoFillBackground">
       <bool>false</bool>
      </property>
      <property name="styleSheet">
       <string notr="true">QWidget#menuContainerBox{

border-right: 1px solid gray;

}

QWidget#menuBoxWidget QPushButton
{
border: 1px solid gray;
border-bottom: none;
border-left: none;
border-right: none;
padding: 3 20px;
text-align: left;
}


QWidget#menuBoxWidget QWidget QPushButton
{
padding: 3 10px;
text-align: right;
}


QWidget#menuBoxWidget QWidget QPushButton:hover
{
    background-color: rgb(168, 168, 168);
}

QWidget#menuBoxWidget QPushButton:hover
{
    background-color: rgb(168, 168, 168);
}


QWidget#menuBoxWidget {
    border-bottom: 1px solid gray;
}</string>
      </property>
      <layout class="QVBoxLayout" name="menuContainer">
       <property name="spacing">
        <number>0</number>
       </property>
       <property name="sizeConstraint">
        <enum>QLayout::SetDefaultConstraint</enum>
       </property>
       <property name="leftMargin">
        <number>0</number>
       </property>
       <property name="topMargin">
        <number>0</number>
       </property>
       <property name="rightMargin">
        <number>0</number>
       </property>
       <property name="bottomMargin">
        <number>0</number>
       </property>
       <item>
        <widget class="QWidget" name="menuBoxWidget" native="true">
         <property name="sizePolicy">
          <sizepolicy hsizetype="Fixed" vsizetype="Minimum">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
         <property name="minimumSize">
          <size>
           <width>100</width>
           <height>0</height>
          </size>
         </property>
         <property name="baseSize">
          <size>
           <width>0</width>
           <height>0</height>
          </size>
         </property>
         <layout class="QVBoxLayout" name="menuBox">
          <property name="spacing">
           <number>0</number>
          </property>
          <property name="leftMargin">
           <number>0</number>
          </property>
          <property name="topMargin">
           <number>0</number>
          </property>
          <property name="rightMargin">
           <number>0</number>
          </property>
          <property name="bottomMargin">
           <number>0</number>
          </property>
          <item>
           <widget class="QPushButton" name="menu1">
            <property name="sizePolicy">
             <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
            <property name="minimumSize">
             <size>
              <width>100</width>
              <height>0</height>
             </size>
            </property>
            <property name="text">
             <string>Menu1</string>
            </property>
           </widget>
          </item>
          <item>
           <widget class="QWidget" name="subMenuBox1" native="true">
            <property name="enabled">
             <bool>true</bool>
            </property>
            <property name="sizePolicy">
             <sizepolicy hsizetype="Fixed" vsizetype="Minimum">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
            <property name="minimumSize">
             <size>
              <width>100</width>
              <height>0</height>
             </size>
            </property>
            <property name="styleSheet">
             <string notr="true"/>
            </property>
            <layout class="QVBoxLayout" name="verticalLayout_4" stretch="0,0">
             <property name="spacing">
              <number>0</number>
             </property>
             <property name="leftMargin">
              <number>0</number>
             </property>
             <property name="topMargin">
              <number>0</number>
             </property>
             <property name="rightMargin">
              <number>0</number>
             </property>
             <property name="bottomMargin">
              <number>0</number>
             </property>
             <item>
              <widget class="QPushButton" name="pushButton_5">
               <property name="text">
                <string>Submenu1_1</string>
               </property>
              </widget>
             </item>
             <item>
              <widget class="QPushButton" name="pushButton">
               <property name="styleSheet">
                <string notr="true"/>
               </property>
               <property name="text">
                <string>Submenu1_2</string>
               </property>
              </widget>
             </item>
            </layout>
           </widget>
          </item>
          <item>
           <widget class="QPushButton" name="menu2">
            <property name="sizePolicy">
             <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
            <property name="minimumSize">
             <size>
              <width>100</width>
              <height>0</height>
             </size>
            </property>
            <property name="text">
             <string>Menu2</string>
            </property>
           </widget>
          </item>
          <item>
           <widget class="QWidget" name="subMenuBox2" native="true">
            <property name="sizePolicy">
             <sizepolicy hsizetype="Fixed" vsizetype="Minimum">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
            <property name="minimumSize">
             <size>
              <width>100</width>
              <height>0</height>
             </size>
            </property>
            <layout class="QVBoxLayout" name="verticalLayout_5">
             <property name="spacing">
              <number>0</number>
             </property>
             <property name="leftMargin">
              <number>0</number>
             </property>
             <property name="topMargin">
              <number>0</number>
             </property>
             <property name="rightMargin">
              <number>0</number>
             </property>
             <property name="bottomMargin">
              <number>0</number>
             </property>
             <item>
              <widget class="QPushButton" name="pushButton_11">
               <property name="text">
                <string>Submenu2_1</string>
               </property>
              </widget>
             </item>
             <item>
              <widget class="QPushButton" name="pushButton_7">
               <property name="text">
                <string>Submenu2_2</string>
               </property>
              </widget>
             </item>
             <item>
              <widget class="QPushButton" name="pushButton_8">
               <property name="text">
                <string>Submenu2_3</string>
               </property>
              </widget>
             </item>
            </layout>
           </widget>
          </item>
          <item>
           <widget class="QPushButton" name="menu3">
            <property name="sizePolicy">
             <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
            <property name="minimumSize">
             <size>
              <width>100</width>
              <height>0</height>
             </size>
            </property>
            <property name="text">
             <string>Menu3</string>
            </property>
           </widget>
          </item>
          <item>
           <widget class="QWidget" name="subMenuBox3" native="true">
            <property name="sizePolicy">
             <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
            <property name="minimumSize">
             <size>
              <width>0</width>
              <height>0</height>
             </size>
            </property>
            <layout class="QVBoxLayout" name="verticalLayout_6">
             <property name="spacing">
              <number>0</number>
             </property>
             <property name="leftMargin">
              <number>0</number>
             </property>
             <property name="topMargin">
              <number>0</number>
             </property>
             <property name="rightMargin">
              <number>0</number>
             </property>
             <property name="bottomMargin">
              <number>0</number>
             </property>
             <item>
              <widget class="QPushButton" name="pushButton_9">
               <property name="text">
                <string>Submenu3_1</string>
               </property>
              </widget>
             </item>
            </layout>
           </widget>
          </item>
         </layout>
        </widget>
       </item>
       <item>
        <spacer name="verticalSpacer">
         <property name="orientation">
          <enum>Qt::Vertical</enum>
         </property>
         <property name="sizeHint" stdset="0">
          <size>
           <width>50</width>
           <height>40</height>
          </size>
         </property>
        </spacer>
       </item>
       <item>
        <widget class="QPushButton" name="LogoBtn">
         <property name="styleSheet">
          <string notr="true">border: none;
font-width: bold;</string>
         </property>
         <property name="text">
          <string>LOGO</string>
         </property>
        </widget>
       </item>
      </layout>
     </widget>
    </item>
    <item>
     <spacer name="horizontalSpacer">
      <property name="orientation">
       <enum>Qt::Horizontal</enum>
      </property>
      <property name="sizeHint" stdset="0">
       <size>
        <width>40</width>
        <height>20</height>
       </size>
      </property>
     </spacer>
    </item>
   </layout>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>695</width>
     <height>21</height>
    </rect>
   </property>
   <widget class="QMenu" name="menuFile">
    <property name="title">
     <string>File</string>
    </property>
    <addaction name="actionExit"/>
   </widget>
   <widget class="QMenu" name="menuAbout">
    <property name="title">
     <string>About</string>
    </property>
    <addaction name="actionAbout"/>
   </widget>
   <addaction name="menuFile"/>
   <addaction name="menuAbout"/>
  </widget>
  <action name="actionAbout">
   <property name="text">
    <string>About...</string>
   </property>
  </action>
  <action name="actionExit">
   <property name="text">
    <string>Exit</string>
   </property>
  </action>
 </widget>
 <resources/>
 <connections/>
</ui>

and here program code:

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include<QDebug>

    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        ui->subMenuBox1->hide();
        ui->subMenuBox2->hide();
        ui->subMenuBox3->hide();
    }

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



    void MainWindow::on_menu1_clicked()
    {
        qInfo() << "Clicked!";
        if (ui->subMenuBox1->isHidden()){
            ui->subMenuBox1->show();
            ui->subMenuBox2->hide();
            ui->subMenuBox3->hide();
        }
    }

    void MainWindow::on_menu2_clicked()
    {
        qInfo() << "Clicked!";
        if (ui->subMenuBox2->isHidden()){
            ui->subMenuBox2->show();
            ui->subMenuBox1->hide();
            ui->subMenuBox3->hide();
        }
    }

    void MainWindow::on_menu3_clicked()
    {
        qInfo() << "Clicked!";
        if (ui->subMenuBox3->isHidden()){
            ui->subMenuBox3->show();
            ui->subMenuBox2->hide();
            ui->subMenuBox1->hide();
        }
    }

it simple and works just fine.

But now i need to style it, by removing all spaces between buttons and align buttons text to left and submenu buttons text little to right.

I try set padding:0 for subMenuBox1 but it only affect buttons height.

Also i need add line on right side of menuBoxWidget so it divide menu from other screen.

How to style it, so menu looks nice?

UPDATE 1:

I updated form code with styles added.


Solution

  • Ok, i figure out how it works!

    Here styles:

    QWidget#menuContainerBox{
    
    border-right: 1px solid gray;
    
    }
    
    QWidget#menuBoxWidget QPushButton
    {
    border: 1px solid gray;
    border-bottom: none;
    border-left: none;
    border-right: none;
    padding: 3 20px;
    text-align: left;
    }
    
    
    QWidget#menuBoxWidget QWidget QPushButton
    {
    padding: 3 10px;
    text-align: right;
    }
    
    
    QWidget#menuBoxWidget QWidget QPushButton:hover
    {
        background-color: rgb(168, 168, 168);
    }
    
    QWidget#menuBoxWidget QPushButton:hover
    {
        background-color: rgb(168, 168, 168);
    }
    
    
    QWidget#menuBoxWidget {
        border-bottom: 1px solid gray;
    }
    

    And now it looks like, it very basic, but it works and looks like i wanted!

    result screnshot