Russian Qt Forum
Апрель 28, 2024, 13:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Кладовка готовых решений  (Прочитано 18221 раз)
merke
Гость
« : Август 22, 2010, 15:21 »

Вот решил создать кладовку готовых решений на Вашем форуме. Объясню что это: уверен у большинства программеров на харде лежат текстовые файлы с какими то участками кода, функциями, которые когда то были найдены или собственноручно написаны для определенный целей и дабы не потерять данные ценные строки коды они сохраняются куда нибудь в файлик, так как запоминать лень=) Предлагаю тем кто не против поделится своими наработками, выкладывать их в данную тему.

Как создатель данного поста, разрежу ленточку сам и выложу вот такую вот функцию:

Функция центрирования окна по середине монитора

Код:
void MainWindow::centerOnDesktop()
{
    quint16 screenWidth, width, screenHeight, height, x, y;
    QSize windowSize;

    screenWidth = QApplication::desktop()->width();
    screenHeight = QApplication::desktop()->height();
    windowSize = size();
    width = windowSize.width();
    height = windowSize.height();
    x = (screenWidth - width) / 2;
    y = (screenHeight - height) / 2;
    y -= 100;
    move(x, y);
}


 
Записан
merke
Гость
« Ответ #1 : Август 22, 2010, 15:23 »

Распечатка текста из QTextEdit

Код:
#ifndef QT_NO_PRINTER
    QPrinter printer(QPrinter::HighResolution);
    QPrintDialog *dlg = new QPrintDialog(&printer, this);
    if (textEdit->textCursor().hasSelection())
        dlg->addEnabledOption(QAbstractPrintDialog::PrintSelection);
    dlg->setWindowTitle(tr("Print Document"));
    if (dlg->exec() == QDialog::Accepted) {
        textEdit->print(&printer);
    }
    delete dlg;
#endif
Записан
merke
Гость
« Ответ #2 : Август 22, 2010, 15:24 »

Удаление повторяющихся элементов в QListWidget

Код:
for (int i = 0; i< ui->listWidget->count(); i++)
        {
            t = 0;
            for (int j = 0; j< ui->listWidget->count(); j++)
            {
                if (ui->listWidget->item(i)->text() == ui->listWidget->item(j)->text())
                {
                    t++;
                    if (t > 1) delete ui->listWidget->takeItem(j);
                }
            }
        }
Записан
merke
Гость
« Ответ #3 : Август 22, 2010, 15:25 »

Ограничение на ввод определенного количества символов в QTextEdit

Код:
void MainWindow::on_textEdit_textChanged()
{
    ui->label_4->setText(QString::number(ui->textEdit->toPlainText().count()) + QString::fromLocal8Bit(" из 100"));
    if (ui->textEdit->toPlainText().count() >= 100){
        QString str;
        str = ui->textEdit->toPlainText().mid(0, 99);
        ui->textEdit->setText(str);
    }
}
Записан
SASA
Гость
« Ответ #4 : Август 22, 2010, 15:30 »

Класс автоматического взведения и сброса флага.
Код:
#ifndef FLAGASSISTANT_H
#define FLAGASSISTANT_H

/// Дефайн для быстрого взведения флага спомощью класса CFlagAssistant.
#define COCKFLAG(flagName) CFlagAssistant flagAssistant(&flagName);

/*! \brief Класс автоматического взведения и сброса флага.
* \author SASA.
* \date 2010/08/18
*/
class CFlagAssistant
{
public:
/*! \brief Конструктор.
* \param[in] _flag (\c bool *) - Указатель на флаг, за которым следим.
*/
CFlagAssistant(bool * _flag)
{
m_flag = _flag;
if(m_flag) *m_flag = true;
}
~CFlagAssistant()
{
if(m_flag) *m_flag = false;
}
protected:
bool * m_flag; ///< Флаг за которым следим.
};

#endif // FLAGASSISTANT_H
Записан
merke
Гость
« Ответ #5 : Август 22, 2010, 15:49 »

Класс нужный. Но напишите маленький пример использования. Если не сложно
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #6 : Август 22, 2010, 16:27 »

Пиплы, приобщайте к сообщению код с примером использования.
А так, стоящая ветка. Улыбающийся Можно даже прикрепить, если разрастется. Но мне кажется, что лучше отдельный раздел выделить для этого и каждое решение отдельной темой, чтобы легче было искать/смотреть. Кто за?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
merke
Гость
« Ответ #7 : Август 22, 2010, 16:34 »

Я только ЗА!!!
Записан
SABROG
Гость
« Ответ #8 : Август 23, 2010, 08:21 »

Функция центрирования окна по середине монитора
А можно это сделать в одну строчку.
Записан
merke
Гость
« Ответ #9 : Август 23, 2010, 09:52 »

Здорово, не знал!!! Спасибо!!!
Записан
SASA
Гость
« Ответ #10 : Август 23, 2010, 10:10 »

Класс нужный. Но напишите маленький пример использования. Если не сложно
Код:
class MyClass
{
public:
MyClass()
{
m_flag = false;
}
/*! Пока исполняется этот метод, флаг должен быть взведённым.
* После выхода из метода, флаг должен сброситься.
*/
void metod()
{
COCKFLAG(m_flag);
много кода c несколькими ретурнами;
}
protected:
m_flag;
};

Самое главное, что изменив код метода (добавив ещё один ретурн) нам не надо писать строку m_flag = false; А про неё так легко забыть  Подмигивающий. А есть ещё исключения, по которым функция может прерваться где угодно. Класс позволяет легко сохранить условие, описанное в комментарии.
Записан
Amigo_sa
Гость
« Ответ #11 : Август 23, 2010, 10:35 »

Класс для блокирования виджетов. Удобен в слотах, где запускаются долгие вычисления, чтобы на врымя обработку слота в очередь не складывались другие сигналы от того же виджета.
class CWidgetLocker
{
public:

   CWidgetLocker(QWidget * aWidget)
   {
      m_lockedWidget = aWidget;
      m_lockedWidget->setEnabled(false);
   }

   ~CWidgetLocker()
   {
      m_lockedWidget->setEnabled(true);
   }

private:

   QWidget * m_lockedWidget;
};

Пример.
void TestExecutor::onRunTest()
{
  CWidgetLocker locker(m_testForm.form.btnWinInfoGo);
  ....
Записан
merke
Гость
« Ответ #12 : Август 23, 2010, 11:17 »

Amigo_sa, здорово!!! Полагаю, очень скоро мне бы как раз понадобился такой класс!!!
Записан
Sancho_s_rancho
Гость
« Ответ #13 : Август 23, 2010, 20:25 »

Синглтон настроек:
Код:
#ifndef SETTINGS_H
#define SETTINGS_H
#include <QSettings>

class Settings
{
public:
    static QSettings  *Instance(){static QSettings s; return &s; }
private:
    Settings();
    Settings(const Settings&);
    Settings& operator= (const Settings&);


};

#endif // SETTINGS_H
Записан
Sancho_s_rancho
Гость
« Ответ #14 : Август 23, 2010, 20:32 »

Простой и эффективный шаблонный класс двумерного массива (Дабы не загромождать дам ссылку):
http://www.assembla.com/code/BitmapFontDrawer/git/nodes/src/array2d.h?rev=af73ec646b4ba26b30e37d1e0f06242682c69184
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.053 секунд. Запросов: 23.