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. How to save non-MainWindow size/position [Solved]

How to save non-MainWindow size/position [Solved]

Scheduled Pinned Locked Moved General and Desktop
4 Posts 2 Posters 2.2k Views 1 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.
  • K Offline
    K Offline
    kloveridge
    wrote on last edited by kloveridge
    #1

    I am writing a desktop application that has a main window and two pop up windows (lets call those the Log and Browser).

    I figured out how to save size/position of the main window using this code:

    void MainWindow::writePositionSettings()
    {
    	QSettings qsettings("esp", "lotus");
    	qsettings.beginGroup("mainwindow");
    	qsettings.setValue("geometry", saveGeometry());
    	qsettings.setValue("savestate", saveState());
    	qsettings.setValue( "maximized", isMaximized() );
    	if ( !isMaximized() ) {
    		qsettings.setValue( "pos", pos() );
    		qsettings.setValue( "size", size() );
    	}
    	qsettings.endGroup();
    	qDebug() << "Saving main window size and position.";
    }
    
    void MainWindow::readPositionSettings()
    {
    	QSettings qsettings( "esp", "lotus" );
    
    	qsettings.beginGroup( "mainwindow" );
    	restoreGeometry(qsettings.value( "geometry", saveGeometry() ).toByteArray());
    	restoreState(qsettings.value( "savestate", saveState() ).toByteArray());
    	move(qsettings.value( "pos", pos() ).toPoint());
    	resize(qsettings.value( "size", size() ).toSize());
    	if ( qsettings.value( "maximized", isMaximized() ).toBool() )
    		showMaximized();
    	qsettings.endGroup();
    }
    

    This works with my main window. My original assumption was I could "daisy chain" the storage pattern by putting similar code in my Browser and Log window. but Qt complained it didn't recognize the commands. I wondered if QSettings was just for a main window and not auxiliary windows. Just hoping for Qt Guru to give me some pointers.

    1 Reply Last reply
    0
    • M Offline
      M Offline
      maximus
      wrote on last edited by
      #2

      Sure you can use QSettings to save any Windows, Dialog geometry,

      Just make sure you load the settings and use a different "group" so your settings do not clash togethers.

      Here is a working example of one of my QDialog:

       void WorkoutDialog::loadInterface() {
      
      QSettings settings("MaxPowerVelo", "PowerVelo");
      
      settings.beginGroup("WorkoutDialog");
      
      
      resize(settings.value("size", QSize(1024, 768)).toSize());
      move(settings.value("pos", QPoint(200, 200)).toPoint());
      
      QList<int> mySize;
      mySize.append( settings.value("splitter0", 2).toInt() );
      mySize.append( settings.value("splitter1", 35).toInt() );
      mySize.append( settings.value("splitter2", 37).toInt() );
      mySize.append( settings.value("splitter3", 27).toInt() );
      ui->splitter->setSizes(mySize);
      
      
      
      bool wasFullscreen = settings.value("fullscreen", false).toBool();
      settings.endGroup();
      
      if (wasFullscreen) {
          wasFullscreenOnOpen = true;
          showFullScreenWin();
      }
      else {
          wasFullscreenOnOpen = false;
          this->setSizeGripEnabled(true);
          ui->widget_topMenu->setMinExpandExitVisible(false);
          ui->widget_topMenu->updateExpandIcon();
      }
      
      }
      
      void WorkoutDialog::saveInterface() {
      
      
      
      //// ------------ Save interface
      QSettings settings("MaxPowerVelo", "PowerVelo");
      
      settings.beginGroup("WorkoutDialog");
      settings.setValue("size", size());
      settings.setValue("pos", pos());
      
      
      QList<int> sizeNow = ui->splitter->sizes();
      settings.setValue("splitter0", sizeNow.at(0));
      settings.setValue("splitter1", sizeNow.at(1));
      settings.setValue("splitter2", sizeNow.at(2));
      settings.setValue("splitter3", sizeNow.at(3));
      
      
      if (this->isFullScreen()) {
          settings.setValue("fullscreen", true);
      }
      else {
          settings.setValue("fullscreen", false);
      }
      
      settings.endGroup();
      }
      

      Free Indoor Cycling Software - https://maximumtrainer.com

      K 1 Reply Last reply
      0
      • M maximus

        Sure you can use QSettings to save any Windows, Dialog geometry,

        Just make sure you load the settings and use a different "group" so your settings do not clash togethers.

        Here is a working example of one of my QDialog:

         void WorkoutDialog::loadInterface() {
        
        QSettings settings("MaxPowerVelo", "PowerVelo");
        
        settings.beginGroup("WorkoutDialog");
        
        
        resize(settings.value("size", QSize(1024, 768)).toSize());
        move(settings.value("pos", QPoint(200, 200)).toPoint());
        
        QList<int> mySize;
        mySize.append( settings.value("splitter0", 2).toInt() );
        mySize.append( settings.value("splitter1", 35).toInt() );
        mySize.append( settings.value("splitter2", 37).toInt() );
        mySize.append( settings.value("splitter3", 27).toInt() );
        ui->splitter->setSizes(mySize);
        
        
        
        bool wasFullscreen = settings.value("fullscreen", false).toBool();
        settings.endGroup();
        
        if (wasFullscreen) {
            wasFullscreenOnOpen = true;
            showFullScreenWin();
        }
        else {
            wasFullscreenOnOpen = false;
            this->setSizeGripEnabled(true);
            ui->widget_topMenu->setMinExpandExitVisible(false);
            ui->widget_topMenu->updateExpandIcon();
        }
        
        }
        
        void WorkoutDialog::saveInterface() {
        
        
        
        //// ------------ Save interface
        QSettings settings("MaxPowerVelo", "PowerVelo");
        
        settings.beginGroup("WorkoutDialog");
        settings.setValue("size", size());
        settings.setValue("pos", pos());
        
        
        QList<int> sizeNow = ui->splitter->sizes();
        settings.setValue("splitter0", sizeNow.at(0));
        settings.setValue("splitter1", sizeNow.at(1));
        settings.setValue("splitter2", sizeNow.at(2));
        settings.setValue("splitter3", sizeNow.at(3));
        
        
        if (this->isFullScreen()) {
            settings.setValue("fullscreen", true);
        }
        else {
            settings.setValue("fullscreen", false);
        }
        
        settings.endGroup();
        }
        
        K Offline
        K Offline
        kloveridge
        wrote on last edited by kloveridge
        #3

        @maximus

        I only had a few minutes this morning to really try this. I will give it another shot tonight.

        You actually answered one of my other questions about how to save sub-components (like a splitter) in your pasted code. So you can stick a "I am awesome" gold star to your forehead for the day. ;)

        1 Reply Last reply
        0
        • M Offline
          M Offline
          maximus
          wrote on last edited by
          #4

          Hehe glad I could help!

          "I am awesome" Max (for the day) :)


          Free Indoor Cycling Software - https://maximumtrainer.com

          1 Reply Last reply
          0

          • Login

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