среда, 27 января 2010 г.

Продолжаем удалять файлы и каталоги

Функция рекурсивного удаления папок не работает если в папке есть файлы только для чтения.
Функция QFile::remove() при попытке удалить такой файл возвращает false. Чтобы этого избежать нужно выставлять права для таких файлов. В Qt для этого есть функция
bool QFile::setPermissions ( const QString & fileNamePermissions permissions )   [static]
Таким образом окончательный вид функции удаления каталога имеет вид:

четверг, 21 января 2010 г.

Очистка каталога

void cleanFolder(const QString & folder)
{
  QDir dir(folder);
  //Получаем список файлов 
  QStringList lstFiles = dir.entryList(QDir::Files);

  //Удаляем файлы
  foreach (QString entry, lstFiles)
  {
   QString entryAbsPath = dir.absolutePath() + "/" + entry;
   QFile::remove(entryAbsPath);
  }
}


* This source code was highlighted with Source Code Highlighter.

вторник, 19 января 2010 г.

Подсветка кода для блога

Изначально я планировал в этом блоге писать о программировании на Qt. Однако сейчас на блоге больше всего постов о покере, Москве, пиве и прочем непотребстве.
Объясняю в чем секрет - отсутствие толковой подсветки кода. Те куски кода, что я помещал в блог имели столь ужасное форматирование и подсветку, что без содрогания читать программу просто невозможно. Я перепробовал множество подсветчиков, однако у всех были недостатки - кто-то по  глупому делает подсветку, кто-то мутит с CSS, что вызывает трудности со вставкой кода.

Наконец я нашел приличный подсветчик: http://source.virtser.net
Он не использует CSS и делает подсветку аналогично Visual Studio.

Вот пример сгенеренного им кода.

ApPhotoRobot::ApPhotoRobot(QWidget * parent )
: DirSelecter(tr("Applications - PhotoRobot"), parent)
{
  lstlblPath.at(0)->setText(tr("Folder of Bars PhotoRobot"));
  lstlblName.at(0)->setText(tr("Executable name of Bars PhotoRobot"));
 
  leOut = new QLineEdit(this);

  QLabel * lblOut = new QLabel(tr("Output folder for Bars Photorobot"), this);

  QToolButton * btnBars = new QToolButton(this);
  btnBars->setFixedSize(20, 20);
  btnBars->setText("...");
  connect(btnBars, SIGNAL(clicked()), this, SLOT(browseDir()));

  mapBtnEdt[btnBars] = leOut;
  grid->addItem(new QSpacerItem(1, 10, QSizePolicy::Fixed, QSizePolicy::Fixed), 5, 0); 
  grid->addWidget(lblOut, 6, 0, 1, 2);
  grid->addWidget(leOut, 7, 0);
  grid->addWidget(btnBars, 7, 1);
 
  grid->setRowStretch(8, 1);

}

* This source code was highlighted with Source Code Highlighter.

На мой взгляд - лучшее решение для вставки кода в блог.