FAQ по QT

Содержание

Вывод русского текста в КОНСОЛЬ

Вариант ДЕЙСТВУЮЩИЙ

Установить кодировку файла исходных текстов — «IBM866».
Включить строки:

#include <QTextCodec>
#include <QTextStream>

И в функции main():

QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForLocale(codec);

Такое шаманство выдало русский текст в консоль инструкцией

cout <<

Другие варианты:

Вариант 1

setlocale(LC_ALL, «Russian»);

Вариант  2

#include <QTextCodec>
#include <QTextStream>

int main(int argc, char *argv[])
{
    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
    QTextStream inC(stdin),outC(stdout);

#ifdef Q_OS_WIN32
        outC.setCodec("IBM866");
#endif

#ifdef Q_OS_LINUX
        outC.setCodec("UTF-8");
#endif

     outC << QObject::tr("Йоу чувак!") << endl;
}

Вариант 3

В файле main добавляем строки:

 #include <QTextCodec>

    QTextCodec *codec = QTextCodec::codecForName("cp1251");

    QTextCodec::setCodecForCStrings(codec);

Теперь текст по qDebug() << будет выводиться русскими буквами корректно.

Диалоги Ввода-вывода информации в QT

Диалог: Информационное сообщение

Критическая ошибка

//tr("Имя файла: %1").arg(i));
QMessageBox::information(this, tr("info"), "Message");  

void Dialog::criticalMessage()
{
   QMessageBox::StandardButton reply;
   reply = QMessageBox::critical(
      this, 
      tr("QMessageBox::critical()"),
      MESSAGE,
      QMessageBox::Abort | 
         QMessageBox::Retry | 
         QMessageBox::Ignore
      );

   if (reply == QMessageBox::Abort)
      criticalLabel->setText(tr("Abort"));
   else if (reply == QMessageBox::Retry)
      criticalLabel->setText(tr("Retry"));
   else
      criticalLabel->setText(tr("Ignore"));
}

Информационное сообщение

void Dialog::informationMessage()
{
   QMessageBox::StandardButton reply;
   reply = QMessageBox::information(
      this, 
      tr("QMessageBox::information()"), 
      MESSAGE);

   if (reply == QMessageBox::Ok)
      informationLabel->setText(tr("OK"));
   else
      informationLabel->setText(tr("Escape"));
}

Вопрос: Да-Нет-Отмена

void Dialog::questionMessage()
{
   QMessageBox::StandardButton reply;
   reply = QMessageBox::question(
      this, 
      tr("QMessageBox::question()"),
      MESSAGE, 
      QMessageBox::Yes | 
         QMessageBox::No | 
         QMessageBox::Cancel
       );

   if (reply == QMessageBox::Yes)
      questionLabel->setText(tr("Yes"));
   else if (reply == QMessageBox::No)
      questionLabel->setText(tr("No"));
   else
      questionLabel->setText(tr("Cancel"));
}

Предупреждение

void Dialog::warningMessage()
{
   QMessageBox msgBox(
      QMessageBox::Warning, 
      tr("QMessageBox::warning()"),
      MESSAGE, 
      0, 
      this);

   msgBox.addButton(tr("Save &Again"), QMessageBox::AcceptRole);
   msgBox.addButton(tr("&Continue"), QMessageBox::RejectRole);
   
   if (msgBox.exec() == QMessageBox::AcceptRole)
      warningLabel->setText(tr("Save Again"));
   else
      warningLabel->setText(tr("Continue"));
}

Ошибка

void Dialog::errorMessage()
{
   errorMessageDialog->showMessage(
      tr("This dialog shows and remembers error messages. "
      "If the checkbox is checked (as it is by default), "
      "the shown message will be shown again, "
      "but if the user unchecks the box the message "
      "will not appear again if QErrorMessage::showMessage() "
      "is called with the same message."));

   errorLabel->setText(tr("If the box is unchecked, the message "
      "won't appear again."));
}

Диалог: Запрос вывода информации – INT

bool ok;
int i = QInputDialog::getInt(
   this, 
   tr("Вопрос"),
   tr("Сколько:"), 
   25, 0, 100, 1, &ok);

if (ok)
{
   QMessageBox::information(
      this, 
      tr("info"), 
      tr("input: %1").arg(i));
}
void Dialog::setInteger()
{
   bool ok;
   int i = QInputDialog::getInt(
      this, 
      tr("QInputDialog::getInteger()"),
      tr("Percentage:"), 
      25, 0, 100, 1, &ok);

if (ok)
      integerLabel->setText(tr("%1%").arg(i));
}

Диалог: Запрос вывода информации – DOUBLE

void Dialog::setDouble()
{
   bool ok;
   double d = QInputDialog::getDouble(
      this, 
      tr("QInputDialog::getDouble()"),
      tr("Amount:"), 
      37.56, -10000, 10000, 2, &ok);
   
   if (ok)
      doubleLabel->setText(QString("$%1").arg(d));
}

Диалог: Запрос вывода информации – ITEM

void Dialog::setItem()
{
   QStringList items;
   items << 
      tr("Spring") << 
      tr("Summer") << 
      tr("Fall") << 
      tr("Winter");

   bool ok;
   QString item = QInputDialog::getItem(
      this, 
      tr("QInputDialog::getItem()"),
      tr("Season:"), 
      items, 0, false, &ok);
   if (ok && !item.isEmpty())
      itemLabel->setText(item);
}

Диалог: Запрос вывода информации – TEXT

void Dialog::setText()
{
   bool ok;
   QString text = QInputDialog::getText(
      this, 
      tr("QInputDialog::getText()"),
      tr("User name:"), 
      QLineEdit::Normal,
      QDir::home().dirName(), &ok);

   if (ok && !text.isEmpty())
      textLabel->setText(text);
}

Диалог: Запрос вывода информации – COLOR

void Dialog::setColor()
{
   QColor color = QColorDialog::getColor(
      Qt::green, this);

   if (color.isValid()) 
   {
      colorLabel->setText(color.name());
      colorLabel->setPalette(QPalette(color));
      colorLabel->setAutoFillBackground(true);
   }
}

Диалог: Запрос вывода информации – FONT

void Dialog::setFont()
{
   bool ok;
   QFont font = QFontDialog::getFont(
      &ok, 
      QFont(fontLabel->text()), 
      this);

   if (ok) 
   {
      fontLabel->setText(font.key());
      fontLabel->setFont(font);
   }
}

Диалог: Запрос вывода информации – DIRECTORY

void Dialog::setExistingDirectory()
{
   QFileDialog::Options options = 
      QFileDialog::DontResolveSymlinks | 
      QFileDialog::ShowDirsOnly;

   if (!native->isChecked())
      options |= QFileDialog::DontUseNativeDialog;

   QString directory = 
      QFileDialog::getExistingDirectory(
         this,
         tr("QFileDialog::getExistingDirectory()"),
         directoryLabel->text(),
         options);

   if (!directory.isEmpty())
      directoryLabel->setText(directory);
}

Диалог: Запрос вывода информации – FILENAME (OPEN)

void Dialog::setOpenFileName()
{
   QFileDialog::Options options;

   if (!native->isChecked())
      options |= QFileDialog::DontUseNativeDialog;

   QString selectedFilter;
   QString fileName = QFileDialog::getOpenFileName(
      this,
      tr("QFileDialog::getOpenFileName()"),
      openFileNameLabel->text(),
      tr("All Files (*);;Text Files (*.txt)"),
      &selectedFilter,
      options);

   if (!fileName.isEmpty())
      openFileNameLabel->setText(fileName);
}

Диалог: Запрос вывода информации – FILENAMES (OPEN)

void Dialog::setOpenFileNames()
{
   QFileDialog::Options options;

   if (!native->isChecked())
      options |= QFileDialog::DontUseNativeDialog;

   QString selectedFilter;
   QStringList files = QFileDialog::getOpenFileNames(
      this, 
      tr("QFileDialog::getOpenFileNames()"),
      openFilesPath,
      tr("All Files (*);;Text Files (*.txt)"),
      &selectedFilter,
      options);

   if (files.count()) 
   {
      openFilesPath = files[0];
      openFileNamesLabel->setText(QString("[%1]").arg(files.join(", ")));
   }
}

Диалог: Запрос вывода информации – FILENAME (SAVE)

void Dialog::setSaveFileName()
{
   QFileDialog::Options options;
   
   if (!native->isChecked())
      options |= QFileDialog::DontUseNativeDialog;

   QString selectedFilter;
   QString fileName = QFileDialog::getSaveFileName(
      this,
      tr("QFileDialog::getSaveFileName()"),
      saveFileNameLabel->text(),
      tr("All Files (*);;Text Files (*.txt)"),
      &selectedFilter,
      options);

   if (!fileName.isEmpty())
      saveFileNameLabel->setText(fileName);
}

Как перевести строку в число?

QString A="3.14";

int x;
x=A.toInt();//в целое число

double y;
y=A.toDouble();//в число с плавающей запятой

Как перевести число в строку?

int x=3; 
QString A;
A=QString::number(x);

Как сделать иконку для exe файла?

Добавляем иконку с именем, например, myappico.ico в папку с проектом расширения .pro. И просто допишите в файле проекта .pro:

RC_ICONS = myappico.ico

Как получить путь к папке, в которой находится приложение?

QString path=QGuiApplication::applicationDirPath();

Как открыть произвольный файл на компьютере через Qt?

#include <QDesktopServices>
#include <QUrl>

QString path=QGuiApplication::applicationDirPath()+"/test.txt";
QDesktopServices::openUrl(QUrl::fromLocalFile(path));
Поделиться
Обновлено: Март 4, 2019 — 19:52

Добавить комментарий