Здесь будут публиковаться бессистемные моменты по Qt, которые могут пригодиться Вам, а я смогу не забыть их.
Содержание
- Статьи на сайте
- Как написать русский текст, чтобы он отображался в Label и др?
- Как добавить текст в textEdit?
- Как считать значение с lineEdit?
- Как перевести строку в число?
- Как перевести число в строку?
- Как сделать иконку для exe файла?
- Как развернуть приложение Qt Quick 2.0 во весь экран?
- Как сослаться на элемент в папке с программой в QtQuick 2.0?
- Как сослаться на элемент из ресурса в QtQuick 2.0?
- Как загрузить текстовой файл в QString?
- Как сохранить QString в текстовой файл?
- Как получить путь к папке, в которой находится приложение?
- Как открыть произвольный файл на компьютере через Qt?
- Как считать список всех файлов в директории?
- Как считать список всех директорий (папок) в директории?
- Как сделать так, чтобы при большом цикле в Qt приложение не застывало?
- Как получить расширение файла по его имени?
- Как перевести QString в QStringList?
- Как перевести QStringList в QString?
- Как добавить в ListView элементы списка?
- Как получить текст выделенного элемента в ListView?
- Как проверить QString на то, что строка пустая?
- Как создать папку?
- Как скопировать файл?
- Какой аналог alAlign и TPanel в Qt?
- Как поставить режим readonly для textEdit?
- Как поставить режим readonly для listView?
- Как скопировать файл?
- Как исправить ошибку при компиляции при добавлении webView на форму?
- Как открыть локальный html файл через QWebView?
- Как в textEdit переместиться к последней добавленной строке?
- Как узнать длину строки QString?
- Как узнать число вхождений подстроки в QString?
- Как узнать время работы функции?
- Как вызвать диалог открытия файла?
- Как сделать так, чтобы элементы растягивались под размер окна в Gui Application?
- Как заменить все вхождения подстроки на другую подстроки в QString?
- Как заменить только первое вхождение подстроки на другую подстроки в QString?
- Как в Qt Creator продублировать текущую строку?
- Как установить Qt?
- Как подключиться к базе данных в Microsoft SQL Server 2012 в Qt
- Как вывести данные в tableView в Qt
- Как сделать tableView только для чтения (ReadOnly)
- Как сохранить данные из QTextEdit в ODF
- Как сохранять из QTableView данные в CSV формат
- Как проиграть mp3 файл?
- Как рисовать графики в Qt
- Как сделать приложение, которое бы не разворачивалось?
- Как добавить в Qt Creator вертикальную линию, показывающую рекомендательную длину строк?
- Как вывести QMessageBox и узнать его результат?
- Как перевести строку в дату?
- Как в statusBar записать сообщение?
Статьи на сайте
Далеко не весь материал по Qt попадает в эту статью. Посмотрите какие еще есть статьи на тему Qt на моём сайте:
http://blog.harrix.org/?page_id=791#h2_3
Как написать русский текст, чтобы он отображался в Label и др?
Если не возиться с универсальностью программы и возможностью перевода на другие языки, то так:
1 |
ui->label->setText(QString::fromLocal8Bit("Русский текст")); |
Как добавить текст в textEdit?
1 2 3 |
QString A="Your string"; ui->textEdit->insertPlainText(A+"\n"); |
Как считать значение с lineEdit?
1 2 |
QString A; A=ui->lineEdit->text(); |
Как перевести строку в число?
1 2 3 4 5 6 7 |
QString A="3.14"; int x; x=A.toInt();//в целое число double y; y=A.toDouble();//в число с плавающей запятой |
Как перевести число в строку?
1 2 3 4 |
int x=3; QString A; A=QString::number(x); |
Как сделать иконку для exe файла?
Update.
Теперь можно сделать проще. Добавляем иконку с именем, например, myappico.ico в папку с проектом расширения .pro.
И просто допишите в файле проекта .pro:
1 |
RC_ICONS = myappico.ico |
Старый вариант
Добавляем иконку с именем, например, myappico.ico в папку с проектом расширения .pro.
Создаем в этой же папке тестовой файл myapp.rc с текстом:
1 |
IDI_ICON1 ICON DISCARDABLE "myappico.ico" |
Открываем файл проекта расширения .pro и в часом конце добавляем:
1 |
win32:RC_FILE = myapp.rc |
Перестраиваете проект и иконка появляется.
Как развернуть приложение Qt Quick 2.0 во весь экран?
В файле main.cpp строчку:
1 |
viewer.showExpanded(); |
Заменяем на
1 |
viewer.showFullScreen(); |
Как сослаться на элемент в папке с программой в QtQuick 2.0?
Через путь file://, например, вот так:
1 2 3 |
Video { source: "file://video01.wmv" } |
Как сослаться на элемент из ресурса в QtQuick 2.0?
Через путь qrc:/, например, вот так:
1 2 3 |
Image { source: "qrc:/images/images/bk.png" } |
Как загрузить текстовой файл в QString?
Подключите заголовочные файлы:
1 2 |
#include <QDebug> #include <QFile> |
Можно воспользоваться любой из двоих функций:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
QString readfile(QString filename) { /* Функция считывает текстовой файл в QString. Входные параметры: filename - имя файла. Возвращаемое значение: Строка со всем содержимым текстового файла. */ QFile file(filename); QString line=""; if(!file.exists()){ qDebug() << "Не существует "<<filename; }else{ qDebug() << filename<<" загружается..."; } if(file.open(QIODevice::ReadOnly|QIODevice::Text)) line=file.readAll(); file.close(); return line; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
QString readfile2(QString filename) { /* Функция считывает текстовой файл в QString. Загружает построчно. Входные параметры: filename - имя файла. Возвращаемое значение: Строка со всем содержимым текстового файла. */ QFile file(filename); QString line=""; if(!file.exists()){ qDebug() << "Не существует "<<filename; }else{ qDebug() << filename<<" загружается..."; } if (file.open(QIODevice::ReadOnly | QIODevice::Text)){ QTextStream stream(&file); while (!stream.atEnd()){ line+=stream.readLine()+"\n"; } } file.close(); return line; } |
Например, так:
1 2 |
QString line; line = readfile("test.txt"); |
Как сохранить QString в текстовой файл?
Подключите заголовочный файл:
1 |
#include <QFile> |
И используйте функцию:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
void savefile(QString line, QString filename) { /* Функция сохраняет QString в текстовой файл. Входные параметры: line - содержимое, которое нужно сохранить; filename - имя файла. Возвращаемое значение: Отсутствует. */ QFile file(filename); if(file.open(QIODevice::WriteOnly | QIODevice::Text)) { QTextStream stream(&file); stream << line; } file.close(); } |
Например, так:
1 2 |
QString line="123"; savefile(line,"test2.txt"); |
Как получить путь к папке, в которой находится приложение?
1 |
QString path=QGuiApplication::applicationDirPath(); |
Как открыть произвольный файл на компьютере через Qt?
Подключите:
1 2 |
#include <QDesktopServices> #include <QUrl> |
1 |
QDesktopServices::openUrl(QUrl::fromLocalFile(path)); |
Например,
1 2 |
QString path=QGuiApplication::applicationDirPath()+"/test.txt"; QDesktopServices::openUrl(QUrl::fromLocalFile(path)); |
Как считать список всех файлов в директории?
Подключите заголовочный файл:
1 |
#include <QDir> |
И используйте функцию:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
QString listfilesindir(QString path) { /* Функция считывает список файлов (включая скрытые) в директории в QString. Входные параметры: path - путь к папке. Возвращаемое значение: Строка со списком файлов в директории, разделенные n в алфавитном порядке. */ QString line=""; QDir dir(path); bool ok = dir.exists(); if (ok) { dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks); dir.setSorting(QDir::Name); QFileInfoList list = dir.entryInfoList(); for (int i = 0; i < list.size(); ++i) { QFileInfo fileInfo = list.at(i); line+=fileInfo.fileName()+"\n"; } } return line; } |
Как считать список всех директорий (папок) в директории?
Подключите заголовочный файл:
1 |
#include <QDir> |
И используйте функцию:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
QString listdirsindir(QString path) { /* Функция считывает список директорий в директории в QString. Входные параметры: path - путь к папке. Возвращаемое значение: Строка со списком директорий в директории, разделенные n в алфавитном порядке. */ QString line=""; QDir dir(path); bool ok = dir.exists(); if (ok) { dir.setFilter(QDir::NoDotAndDotDot | QDir::Dirs ); dir.setSorting(QDir::Name); QFileInfoList list = dir.entryInfoList(); for (int i = 0; i < list.size(); ++i) { QFileInfo fileInfo = list.at(i); line+=fileInfo.fileName()+"\n"; } } return line; } |
Как сделать так, чтобы при большом цикле в Qt приложение не застывало?
Аналог Application->ProcessMessages в С++ Builder или ::Application::DoEvents() в Visual Studio в Qt есть:
1 |
QGuiApplication::processEvents(); |
Например:
1 2 3 4 5 6 7 8 9 10 11 |
int s=0; for (int i=0;i<1000;i++) { for (int j=0;j<1000;j++) { QString A="Example"; s++; QGuiApplication::processEvents(); } } |
Но разумеется, что лучше использовать потоки для этого.
Как получить расширение файла по его имени?
Используйте функцию:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
QString HQt_GetExpFromFilename(QString filename) { /* Функция получает расширение файла по его имени. Входные параметры: filename - имя файла. Возвращаемое значение: Строка значением расширения файла в нижнем регистре. */ QString exp=""; exp=filename.mid(filename.lastIndexOf(".")+1); exp=exp.toLower(); return exp; } |
Например, можно использовать так:
1 2 3 |
QString A="test.txt"; Qstring B=HQt_GetExpFromFilename(A); //B=="txt" |
Как перевести QString в QStringList?
Используйте функцию:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
QStringList HQt_QStringToQStringList(QString line) { /* Функция переводит QString в QStringList. Входные параметры: line - строка. Возвращаемое значение: Список строк. */ QStringList lines = line.split( "\n", QString::SkipEmptyParts ); return lines; } |
Как перевести QStringList в QString?
Используйте функцию:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
QString HQt_QStringListToQString(QStringList lines) { /* Функция переводит QStringList в QString. Входные параметры: lines - список строк. Возвращаемое значение: Строка с разделениями n. */ QString line = lines.join('\n'); return line; } |
Как добавить в ListView элементы списка?
Пример кода показан ниже:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
QStandardItemModel *model = new QStandardItemModel;//новая модель списка QStandardItem *item;//элемент списка //добавление нового элемента item = new QStandardItem(QString("TEST 1")); model->appendRow(item); //добавление нового элемента item = new QStandardItem(QString("TEST 2")); model->appendRow(item); //соединение модели списка с конкретным списком ui->listView->setModel(model); |
Как получить текст выделенного элемента в ListView?
Если нужно узнать текст в произвольном месте программы, то используйте следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
QString Result;//Итоговый результат QModelIndexList selectedIndexes = ui->listView->selectionModel()->selectedIndexes(); QStringList selectedTexts;//в теории может быть несколько выделенных пунктов списка //пробегаем по всем элементам списка foreach(const QModelIndex &idx, selectedIndexes) { selectedTexts << idx.data(Qt::DisplayRole).toString();//выдергиваем наименования значений списка } Result=selectedTexts.join(',');//соединяем все найденные элементы //используем результат ui->textEdit->insertPlainText(Result); |
Если текст нужно узнать из функции клика по самому компоненту ListView on_listView_clicked, то вот пример нужного кода:
1 2 3 4 5 6 7 8 9 10 |
void MainWindow::on_listView_clicked(const QModelIndex &index) { QString Result;//Итоговый результат //выдергиваем текст Result=index.data(Qt::DisplayRole).toString(); //используем результат ui->textEdit->insertPlainText(Result); } |
Как проверить QString на то, что строка пустая?
Вот код:
1 2 3 4 |
if (Temp.trimmed().isEmpty()) { //строка пустая } |
Если вы допускаете, что строка может содержать пробелы и так далее, то используйте код:
1 2 3 4 |
if (Temp.isEmpty()) { //строка пустая } |
Как создать папку?
Вот код для создания папки:
1 2 3 4 |
if (!(QDir(path).exists()==true) ) { QDir().mkdir(path); } |
Как скопировать файл?
Используйте следующую функцию:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
bool HQt_CopyFile(QString filename, QString dir) { /* Функция копирует файл filename в папку dir. Входные параметры: filename - имя файла (с полным путем), dir - путь к папке, куда нужно скопировать файл. Возвращаемое значение: true - если скопировалось удачно, false - если скопировалось неудачно. */ QFileInfo fileInfo(filename); QString destinationFile = dir + QDir::separator() + fileInfo.fileName(); bool result = QFile::copy(filename, destinationFile); return result; } |
Какой аналог alAlign и TPanel в Qt?
Читайте тут: http://blog.harrix.org/?p=765.
Как поставить режим readonly для textEdit?
Пропишите:
1 |
ui->textEdit->setReadOnly(true); |
Например, в функции:
1 2 3 4 5 6 7 8 |
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); ui->textEdit->setReadOnly(true); } |
Как поставить режим readonly для listView?
Пропишите:
1 |
ui->listView->setEditTriggers(QAbstractItemView::NoEditTriggers); |
Например, в функции:
1 2 3 4 5 6 7 8 |
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); ui->listView->setEditTriggers(QAbstractItemView::NoEditTriggers); } |
Как скопировать файл?
Вам что-то из этого нужно будет подключить:
1 2 3 |
#include <QFile> #include <QUrl> #include <QDir> |
Воспользуйтесь функцией:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
bool HQt_CopyFile(QString filename, QString dir, bool overwrite) { /* Функция копирует файл filename в папку dir, с возможносью перезаписи. Входные параметры: filename - имя файла (с полным путем), dir - путь к папке, куда нужно скопировать файл. overwrite - если true, то перезаписывать, если false, то не перезаписывать Возвращаемое значение: true - если скопировалось удачно, false - если скопировалось неудачно. */ QFileInfo fileInfo(filename); QString destinationFile = dir + QDir::separator() + fileInfo.fileName(); if ((QFile::exists(destinationFile))&&(overwrite==true)) { QFile::remove(destinationFile); } bool result = QFile::copy(filename, destinationFile); return result; } |
Как исправить ошибку при компиляции при добавлении webView на форму?
При добавлении webView на форму возникает ошибка при компиляции:
1 |
error: undefined reference to `_imp___ZN8QWebViewC1EP7QWidget' |
Откройте файл проекта .pro и строчку:
1 |
QT += core gui |
замените на строчку:
1 |
QT += core gui webkitwidgets |
Как открыть локальный html файл через QWebView?
Воспользуйтесь строчкой:
1 |
ui->webView->setUrl(QUrl::fromLocalFile(path)); |
path – переменная типа QString. Для открытия файла index.html, находящийся в папке с программой воспользуйтесь кодом:
1 |
QString path=QGuiApplication::applicationDirPath()+QDir::separator()+"index.html"; |
Как в textEdit переместиться к последней добавленной строке?
Например, это надо при добавлении новых строк, которые не влезают в окно textEdit. Воспользуйтесь кодом:
1 2 3 |
QTextCursor c = ui->textEdit->textCursor(); c.movePosition(QTextCursor::End); ui->textEdit->setTextCursor(c); |
Как узнать длину строки QString?
Вот код с функцией:
1 2 3 |
QString A="Simipl;d n;fr;"; int s=A.count(); |
Как узнать число вхождений подстроки в QString?
Вот код с функцией:
1 2 3 |
QString A="Simipl;d n;fr;"; int s=A.count(";");//s==3 |
Как узнать время работы функции?
1 2 3 4 |
QTime myTimer; myTimer.start(); // do something.. int nMilliseconds = myTimer.elapsed(); |
Как вызвать диалог открытия файла?
Для начала подключите модуль:
1 |
#include <QFileDialog> |
А потом в месте, где вызывается диалог, напишите:
1 |
QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),"",tr("Files (*.*)"));//где пропуск - там путь |
Как сделать так, чтобы элементы растягивались под размер окна в Gui Application?
Об этом читайте в статье Аналог Align alClient в Qt Gui Application.
Как заменить все вхождения подстроки на другую подстроки в QString?
Пример ниже приведен:
1 2 3 |
QString VHML_Result="54128961234"; VHML_Result=VHML_Result.replace("1","2"); |
Как заменить только первое вхождение подстроки на другую подстроки в QString?
Пример ниже приведен:
1 2 3 4 5 |
QString str("this is a string"); // The initial string. QString subStr("is"); // String to replace. QString newStr("at"); // Replacement string. str.replace(str.indexOf(subStr), subStr.size(), newStr); |
Как в Qt Creator продублировать текущую строку?
Для этого используется сочетания Ctrl + Alt + Down. Кстати, в Notepad++ аналогичное действие делает сочетание: Ctrl + D.
Как установить Qt?
Смотрите статью http://blog.harrix.org/?p=917.
Как подключиться к базе данных в Microsoft SQL Server 2012 в Qt
Смотрите в статье.
Как вывести данные в tableView в Qt
Смотрите в статье.
Как сделать tableView только для чтения (ReadOnly)
Используйте в самом начале программы (например в конструкторе формы) такой вызов:
1 |
ui->tableView->setEditTriggers(QTableWidget::NoEditTriggers); |
Как сохранить данные из QTextEdit в ODF
Читать статью.
Как сохранять из QTableView данные в CSV формат
Читать статью.
Как проиграть mp3 файл?
Прочитать можно в статье.
Как рисовать графики в Qt
Читать статью тут.
Как сделать приложение, которое бы не разворачивалось?
В main.cpp перед строчкой w.show(); пишем строчки:
1 2 |
w.setWindowFlags(Qt::Dialog); w.setFixedSize(QSize(466, 485)); |
Вместо чисел ставите свои размеры окна.
Как добавить в Qt Creator вертикальную линию, показывающую рекомендательную длину строк?
Идите в настройки Tools → Options:
Как вывести QMessageBox и узнать его результат?
1 2 3 4 5 6 7 8 9 |
QMessageBox::StandardButton reply; reply = QMessageBox::question(this, "Test", "Quit?", QMessageBox::Yes|QMessageBox::No); if (reply == QMessageBox::Yes) { qDebug() << "Yes was clicked"; QApplication::quit(); } else { qDebug() << "Yes was *not* clicked"; } |
Как перевести строку в дату?
1 |
QDate currDate(QDate::fromString("20090512", "yyyyMMdd")); |
Как в statusBar записать сообщение?
1 |
statusBar->showMessage(tr("Ready")); |