Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. setAutoFillBackgroundRole not working
Qt 6.11 is out! See what's new in the release blog

setAutoFillBackgroundRole not working

Scheduled Pinned Locked Moved Solved General and Desktop
15 Posts 3 Posters 2.7k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • O Offline
    O Offline
    ofmrew
    wrote on last edited by
    #1

    I check the autoFillBackground box and
    ui->canvas->setAutoFillBackground(QPalette::Base);

    but I do not get the canvas filled with white.
    Canvas is a new class and in Designer I added a widget, promoted it to MyCanvas and added the line above to MainWindow. I have done this more times than I can remember, but this is the first time it has failed. Can some one suggest how I can find out why this fail?

    JonBJ 1 Reply Last reply
    0
    • O ofmrew

      I check the autoFillBackground box and
      ui->canvas->setAutoFillBackground(QPalette::Base);

      but I do not get the canvas filled with white.
      Canvas is a new class and in Designer I added a widget, promoted it to MyCanvas and added the line above to MainWindow. I have done this more times than I can remember, but this is the first time it has failed. Can some one suggest how I can find out why this fail?

      JonBJ Offline
      JonBJ Offline
      JonB
      wrote on last edited by
      #2

      @ofmrew
      QWidget::setAutoFillBackground(bool enabled) has always taken a bool, not QPalette::Base.

      O 1 Reply Last reply
      2
      • JonBJ JonB

        @ofmrew
        QWidget::setAutoFillBackground(bool enabled) has always taken a bool, not QPalette::Base.

        O Offline
        O Offline
        ofmrew
        wrote on last edited by
        #3

        @JonB I am referring to creating the UI in Designer, I have never created a ui programmatically; However, I looks like I must.

        O 1 Reply Last reply
        0
        • O ofmrew

          @JonB I am referring to creating the UI in Designer, I have never created a ui programmatically; However, I looks like I must.

          O Offline
          O Offline
          ofmrew
          wrote on last edited by
          #4

          @ofmrew All of the examples I have seen start with QWidget and not QMainWindow; however, I need the features that QMainWindows provides. Can you point me to and example of a UI based on QMainWindows?

          mrjjM 1 Reply Last reply
          0
          • O ofmrew

            @ofmrew All of the examples I have seen start with QWidget and not QMainWindow; however, I need the features that QMainWindows provides. Can you point me to and example of a UI based on QMainWindows?

            mrjjM Offline
            mrjjM Offline
            mrjj
            Lifetime Qt Champion
            wrote on last edited by
            #5

            @ofmrew

            Hi
            Its also a property so you should be able to set in designer.
            alt text

            O 1 Reply Last reply
            0
            • mrjjM mrjj

              @ofmrew

              Hi
              Its also a property so you should be able to set in designer.
              alt text

              O Offline
              O Offline
              ofmrew
              wrote on last edited by
              #6

              @mrjj I stated in the first line that that was done.

              mrjjM 1 Reply Last reply
              1
              • O ofmrew

                @mrjj I stated in the first line that that was done.

                mrjjM Offline
                mrjjM Offline
                mrjj
                Lifetime Qt Champion
                wrote on last edited by
                #7

                @ofmrew
                Ah The question is how to set the color for the
                setAutoFillBackground(bool) then ?

                You can change its palette or use a stylesheet.
                (you can change palette in the designer)

                1 Reply Last reply
                0
                • O Offline
                  O Offline
                  ofmrew
                  wrote on last edited by
                  #8

                  Update. I created a new UI using the same steps as before and I works fine! Sometimes Designer drives me crazy, especially when layouts are involved. However, for now, problem solved. Thanks for your input. However, I would still like that reference to programmatically creating a UI with QMainWindow.

                  JonBJ mrjjM 2 Replies Last reply
                  0
                  • O ofmrew

                    Update. I created a new UI using the same steps as before and I works fine! Sometimes Designer drives me crazy, especially when layouts are involved. However, for now, problem solved. Thanks for your input. However, I would still like that reference to programmatically creating a UI with QMainWindow.

                    JonBJ Offline
                    JonBJ Offline
                    JonB
                    wrote on last edited by
                    #9

                    @ofmrew
                    A QMainWindow is a QWidget, so anything & everything you can do with the latter you can do too with the former. For QMainWindow concepts and code start at https://doc.qt.io/qt-6/qmainwindow.html#details.

                    O 1 Reply Last reply
                    1
                    • O ofmrew

                      Update. I created a new UI using the same steps as before and I works fine! Sometimes Designer drives me crazy, especially when layouts are involved. However, for now, problem solved. Thanks for your input. However, I would still like that reference to programmatically creating a UI with QMainWindow.

                      mrjjM Offline
                      mrjjM Offline
                      mrjj
                      Lifetime Qt Champion
                      wrote on last edited by mrjj
                      #10

                      @ofmrew
                      Ok super.

                      You mean a QMainWindow based one from code ?

                      #include <QApplication>
                      #include <QMainWindow>
                      #include <QMenuBar>
                      #include <QStatusBar>
                      
                      int main(int argc, char *argv[])
                      {
                          QApplication a(argc, argv);
                      
                          QMainWindow MainWindow;
                          MainWindow.setObjectName(QString::fromUtf8("MainWindow"));
                          MainWindow.resize(800, 600);
                       // mainwin has a special area called centralwidget where you put stuff
                          QWidget *centralwidget = new QWidget(&MainWindow);
                          MainWindow.setCentralWidget(centralwidget);
                      // and a menu bar
                          QMenuBar *menubar = new QMenuBar(&MainWindow);
                          MainWindow.setMenuBar(menubar);
                      // and a status bar
                          QStatusBar *statusbar = new QStatusBar(&MainWindow);
                          MainWindow.setStatusBar(statusbar);
                          MainWindow.show();
                          return a.exec();
                      }
                      
                      O 2 Replies Last reply
                      1
                      • JonBJ JonB

                        @ofmrew
                        A QMainWindow is a QWidget, so anything & everything you can do with the latter you can do too with the former. For QMainWindow concepts and code start at https://doc.qt.io/qt-6/qmainwindow.html#details.

                        O Offline
                        O Offline
                        ofmrew
                        wrote on last edited by
                        #11

                        @JonB I had that, I was looking for more. So, I will post what I find out.

                        1 Reply Last reply
                        0
                        • mrjjM mrjj

                          @ofmrew
                          Ok super.

                          You mean a QMainWindow based one from code ?

                          #include <QApplication>
                          #include <QMainWindow>
                          #include <QMenuBar>
                          #include <QStatusBar>
                          
                          int main(int argc, char *argv[])
                          {
                              QApplication a(argc, argv);
                          
                              QMainWindow MainWindow;
                              MainWindow.setObjectName(QString::fromUtf8("MainWindow"));
                              MainWindow.resize(800, 600);
                           // mainwin has a special area called centralwidget where you put stuff
                              QWidget *centralwidget = new QWidget(&MainWindow);
                              MainWindow.setCentralWidget(centralwidget);
                          // and a menu bar
                              QMenuBar *menubar = new QMenuBar(&MainWindow);
                              MainWindow.setMenuBar(menubar);
                          // and a status bar
                              QStatusBar *statusbar = new QStatusBar(&MainWindow);
                              MainWindow.setStatusBar(statusbar);
                              MainWindow.show();
                              return a.exec();
                          }
                          
                          O Offline
                          O Offline
                          ofmrew
                          wrote on last edited by
                          #12

                          @mrjj Thanks. I will use that code as a starting point and post my results.

                          1 Reply Last reply
                          0
                          • mrjjM mrjj

                            @ofmrew
                            Ok super.

                            You mean a QMainWindow based one from code ?

                            #include <QApplication>
                            #include <QMainWindow>
                            #include <QMenuBar>
                            #include <QStatusBar>
                            
                            int main(int argc, char *argv[])
                            {
                                QApplication a(argc, argv);
                            
                                QMainWindow MainWindow;
                                MainWindow.setObjectName(QString::fromUtf8("MainWindow"));
                                MainWindow.resize(800, 600);
                             // mainwin has a special area called centralwidget where you put stuff
                                QWidget *centralwidget = new QWidget(&MainWindow);
                                MainWindow.setCentralWidget(centralwidget);
                            // and a menu bar
                                QMenuBar *menubar = new QMenuBar(&MainWindow);
                                MainWindow.setMenuBar(menubar);
                            // and a status bar
                                QStatusBar *statusbar = new QStatusBar(&MainWindow);
                                MainWindow.setStatusBar(statusbar);
                                MainWindow.show();
                                return a.exec();
                            }
                            
                            O Offline
                            O Offline
                            ofmrew
                            wrote on last edited by
                            #13

                            @mrjj I am using your code in QtCreator Widget Application, not Console Application because when I tried that the includes could not be found. I have searched the documentation and I have this :

                                    QWidget *centralwidget = new QWidget(&MainWindow);
                                    MainWindow.setCentralWidget(centralwidget);
                                    QVBoxLayout * centraLWidgetLayout = new QVBoxLayout(centralwidget);
                                    QHBoxLayout * buttonLayout = new QHBoxLayout();
                                    QWidget * mainWindow = new QWidget(centralwidget);
                                    QPushButton * button1 = new QPushButton("Button 1");
                                    QPushButton * button2 = new QPushButton("Button 2");
                                    buttonLayout->addWidget(button1);
                                    buttonLayout->addWidget(button2);
                            

                            I know that there must be a layout associated with the central widget but how do I get centraLWidgetLayout associated with the central widget and I assume that buttonLayout must be associated with some widget, but what is that widget? I can add my buttons to the buttonLayout and I what that layout and MyCanvas widget In the centraLWidgetLayout.

                            This why I was looking for an example that starts with QMainWindow and not QWidget. The documentation says what happens, but not how to get what you want to happen. Help.

                            1 Reply Last reply
                            0
                            • O Offline
                              O Offline
                              ofmrew
                              wrote on last edited by
                              #14

                              I finally got it:

                              #include "mainwindow.h"
                              #include <QMainWindow>
                              #include <QMenuBar>
                              #include <QStatusBar>
                              #include <QHBoxLayout>
                              #include <QVBoxLayout>
                              #include <QWidget>
                              #include <QPushButton>
                              #include "mycanvas.h"
                              #include <QApplication>
                              
                              int main(int argc, char *argv[])
                              {
                              
                                  QApplication a(argc, argv);
                                  QMainWindow MainWindow;
                                      MainWindow.setObjectName(QString::fromUtf8("MainWindow"));
                                      MainWindow.resize(800, 600);
                                   // mainwin has a special area called centralwidget where you put stuff
                                      QWidget *centralwidget = new QWidget(&MainWindow);
                                      MainWindow.setCentralWidget(centralwidget);
                                      QVBoxLayout * centraLWidgetLayout = new QVBoxLayout(centralwidget);
                                      MyCanvas * canvas = new MyCanvas(centralwidget);
                                      canvas->setAutoFillBackground(true);
                                      canvas->setBackgroundRole(QPalette::Base);
                                      QHBoxLayout * buttonLayout = new QHBoxLayout();
                                      QPushButton * button1 = new QPushButton("Button 1");
                                      QPushButton * button2 = new QPushButton("Button 2");
                                      buttonLayout->addWidget(button1);
                                      buttonLayout->addWidget(button2);
                                      centraLWidgetLayout->addWidget(canvas);
                                      centraLWidgetLayout->addLayout(buttonLayout);
                                  // and a menu bar
                                      QMenuBar *menubar = new QMenuBar(&MainWindow);
                                      MainWindow.setMenuBar(menubar);
                                  // and a status bar
                                      QStatusBar *statusbar = new QStatusBar(&MainWindow);
                                      MainWindow.setStatusBar(statusbar);
                                  MainWindow.show();
                                  return a.exec();
                              }
                              

                              Thanks mrjj.
                              I need to add horizontal spacers.
                              Easier than I thought it would be.

                              Now I need to find out why the .h and .ccp file were not found when I tried console mode.

                              1 Reply Last reply
                              0
                              • O Offline
                                O Offline
                                ofmrew
                                wrote on last edited by
                                #15

                                The following is a updated version. The last version did not do anything so I add signals and slots so it would be useful.

                                #include "mainwindow.h"
                                #include <QMainWindow>
                                #include <QMenuBar>
                                #include <QStatusBar>
                                #include <QHBoxLayout>
                                #include <QVBoxLayout>
                                #include <QWidget>
                                #include <QPushButton>
                                #include "mycanvas.h"
                                #include <QDebug>
                                #include <QApplication>
                                
                                int main(int argc, char *argv[])
                                {
                                
                                    QApplication a(argc, argv);
                                
                                    QMainWindow MainWindow;
                                    MainWindow.setObjectName(QString::fromUtf8("MainWindow"));
                                    MainWindow.setWindowTitle("My Try");
                                    MainWindow.resize(800, 600);
                                    QWidget *centralwidget = new QWidget(&MainWindow);
                                    MainWindow.setCentralWidget(centralwidget);
                                    QVBoxLayout * centraLWidgetLayout = new QVBoxLayout(centralwidget);
                                    MyCanvas * canvas = new MyCanvas(centralwidget);
                                    canvas->setAutoFillBackground(true);
                                    canvas->setBackgroundRole(QPalette::Base);
                                    QHBoxLayout * buttonLayout = new QHBoxLayout();
                                    QPushButton * button1 = new QPushButton("Button 1");
                                    QPushButton * button2 = new QPushButton("Button 2");
                                    buttonLayout->addWidget(button1);
                                    buttonLayout->addWidget(button2);
                                    buttonLayout->insertSpacing(1,30);
                                    centraLWidgetLayout->addWidget(canvas);
                                    centraLWidgetLayout->addLayout(buttonLayout);
                                    // and a menu bar
                                        QMenuBar *menubar = new QMenuBar(&MainWindow);
                                        MainWindow.setMenuBar(menubar);
                                    // and a status bar
                                        QStatusBar *statusbar = new QStatusBar(&MainWindow);
                                        MainWindow.setStatusBar(statusbar);
                                    MainWindow.connect(button1, &QPushButton::clicked,[statusbar](){statusbar->showMessage("clicked 1");});
                                    MainWindow.show();
                                    return a.exec();
                                }
                                

                                However, after adding the spacer to separate the two buttons and looking at the work still to be done, really makes me appreciate Designer, even with all it quirks. Hope this might help someone else.

                                1 Reply Last reply
                                1

                                • Login

                                • Login or register to search.
                                • First post
                                  Last post
                                0
                                • Categories
                                • Recent
                                • Tags
                                • Popular
                                • Users
                                • Groups
                                • Search
                                • Get Qt Extensions
                                • Unsolved