Название: Как сохранить размеры формы на выходе из программы? 
					Отправлено: Dr.Vlad от Апреля 13, 2010,  22:02
					 
					Здравствуйте.  Как мне сохранить размеры формы на выходе из программы, если у меня на ней три фрейма с TableView и два сплиттера между ними. Премного благодарен.
  
					 
					 
					Название: Re: Как сохранить размеры формы на выходе из программы? 
					Отправлено: Karl-Philipp от Апреля 13, 2010,  22:39
					 
					QSettings?
  p.s. Как вопрос относится к базам даных? 
					 
					 
					Название: Re: Как сохранить размеры формы на выходе из программы? 
					Отправлено: voronElf от Апреля 14, 2010,  07:28
					 
					код выдернул из своей проги для сплиттеров и окошек,  CSettings унаследован от QSettings  bool CSettings::saveSplitterSizes(QSplitter * split, const QString & key, const QString & prefix) {     QList<int> sizes = split->sizes();     QString data;     for(int i=0; i<sizes.size(); i++) {         if(i>0) data += "*";         data += QString::number( sizes.at(i) );     }//for     if(prefix.isEmpty()) setValue(key, data);     else setValue(prefix + "/" + key, data);     return true; }
  bool CSettings::setSplitterSizes(QSplitter * split, const QString & key, const QString & prefix) {     QString data;     if(prefix.isEmpty()) data = key; else data = prefix + "/" + key;     data = value(data, QVariant()).toString();     if(data.isEmpty()) return false;     QStringList list = data.split(QChar('*'), QString::SkipEmptyParts);     QList<int> sizes;     bool ok = false;     for(int i=0; i<list.size(); i++) {         sizes << list.at(i).toInt(&ok);         if(!ok) return false;     }//for     split->setSizes( sizes );     return true; }
  bool CSettings::saveGuiStateWindow(QWidget * wnd, const QString & key, const QString & prefix) {     QString path;     if(prefix.isEmpty()) path = key; else path = prefix +"/"+ key;     setValue(path + "_state", (int)wnd->windowState());     if(!(wnd->windowState() & Qt::WindowMaximized)) setValue(path + "_geometry", wnd->geometry());     return true; }
  bool CSettings::setGuiStateWindow(QWidget * wnd, const QString & key, const QString & prefix) {     QString path;     if(prefix.isEmpty()) path = key; else path = prefix +"/"+ key;
      QRect geometry = value(path + "_geometry", wnd->geometry()).toRect();     if(geometry.isValid()) wnd->setGeometry(geometry);
      int state = value(path + "_state", Qt::WindowMaximized).toInt();     if(state & Qt::WindowMaximized) wnd->setWindowState(Qt::WindowMaximized);     else wnd->setWindowState(Qt::WindowNoState);     return true; } 
					 
					 
					Название: Re: Как сохранить размеры формы на выходе из программы? 
					Отправлено: ecspertiza от Апреля 14, 2010,  07:57
					 
					Вот ещё пример, точно сказать как он у тебя отработает не могу, но у меня в софтине от сохраняет и загружает виджеты на форме в том порядке и с тем размером в котором их оставил юзверь void MainWindow::saveLayout() {     QFile file(QCoreApplication::applicationDirPath()+"/settings.set");     if (!file.open(QFile::WriteOnly)) {         QString msg = tr("Failed to open %1\n%2")                         .arg("settings.set")                         .arg(file.errorString());         QMessageBox::warning(this, tr("Error"), msg);         return;     }
      QByteArray geo_data = saveGeometry();     QByteArray layout_data = saveState();
      bool ok = file.putChar((uchar)geo_data.size());     if (ok)         ok = file.write(geo_data) == geo_data.size();     if (ok)         ok = file.write(layout_data) == layout_data.size();
      if (!ok) {         QString msg = tr("Error writing to %1\n%2")                         .arg("settings.set")                         .arg(file.errorString());         QMessageBox::warning(this, tr("Error"), msg);         return;     } }
  void MainWindow::loadLayout() {     QFile file(QCoreApplication::applicationDirPath()+"/settings.set");     if (!file.open(QFile::ReadOnly)) {         QString msg = tr("Failed to open %1\n%2")                         .arg("settings.set")                         .arg(file.errorString());         QMessageBox::warning(this, tr("Error"), msg);         return;     }
      uchar geo_size;     QByteArray geo_data;     QByteArray layout_data;
      bool ok = file.getChar((char*)&geo_size);     if (ok) {         geo_data = file.read(geo_size);         ok = geo_data.size() == geo_size;     }     if (ok) {         layout_data = file.readAll();         ok = layout_data.size() > 0;     }
      if (ok)         ok = restoreGeometry(geo_data);     if (ok)         ok = restoreState(layout_data);
      if (!ok) {         QString msg = tr("Error reading %1")                         .arg("settings.set");         QMessageBox::warning(this, tr("Error"), msg);         return;     } }
     
					 
					 
					Название: Re: Как сохранить размеры формы на выходе из программы? 
					Отправлено: alexman от Апреля 14, 2010,  08:18
					 
					ПС: break и niXman наверно опустят этот код ниже плинтуса, если не лень будет писать ))) 
  А что в этом плохого? Если реально код плох почему бы не узнать все свои ошибки? Наоборот хорошо когда есть [оправданная] критика! Есть к чему стремиться :)  
					 
					 
					Название: Re: Как сохранить размеры формы на выходе из программы? 
					Отправлено: Kolobok от Апреля 14, 2010,  11:05
					 
					код выдернул из своей проги для сплиттеров
  У QSplitter есть методы сохранения/восстановления состояния bool restoreState ( const QByteArray & state ) QByteArray saveState () const
   
					 
					 
					Название: Re: Как сохранить размеры формы на выходе из программы? 
					Отправлено: voronElf от Апреля 14, 2010,  12:01
					 
					ПС: break и niXman наверно опустят этот код ниже плинтуса, если не лень будет писать ))) 
  А что в этом плохого? Если реально код плох почему бы не узнать все свои ошибки? Наоборот хорошо когда есть [оправданная] критика! Есть к чему стремиться :) а я и не говорю что это плохо, даже наоборот, интересно было бы услышать (т.е. прочитать ) У QSplitter есть методы сохранения/восстановления состояния а проверял как они работают ? я попытался (давно уже), закосячилось все, плюнул и написал сам  
					 
					 
					Название: Re: Как сохранить размеры формы на выходе из программы? 
					Отправлено: Kolobok от Апреля 14, 2010,  12:39
					 
					а проверял как они работают ?
  Проверял. Работают.  
					 
					 
					Название: Re: Как сохранить размеры формы на выходе из программы? 
					Отправлено: Пантер от Апреля 14, 2010,  16:22
					 
					Работают отлично. 
					
  
					
				 |