Qt

Кнопки QMessageBox на русском языке

Когда в проекте принципиально нужен русский язык абсолютно во всех надписях, включая текст стандартных кнопок всплывающих сообщений, есть пара способов это обеспечить. Но тот, который я хочу описать здесь — самый простой и удобный.

Ищем файл qt_ru.qm в папке translations. У меня это такой путь: d:\Qt\5.8\mingw53_32\translations\. Копируем в рабочую папку проекта, а в main.cpp пишем следующее: Продолжить чтение «Кнопки QMessageBox на русском языке»

Qt

Получить значения полей выделенной строки QTableView

Для получения значения полей выделенной строки QTableView можно использовать несколько вариантов. Продолжить чтение «Получить значения полей выделенной строки QTableView»

Qt

Значения ячеек выделенных строк QTableView

Необходимо узнать значения ячеек выделенных строк в таблице класса QTableView, которая отображает некоторые данные.

Следующий пример покажет, как записать значения 0-ой ячейки каждой выделенной строки в список, а затем сформировать строку из этих значений, элементы которой разделены «,»: Продолжить чтение «Значения ячеек выделенных строк QTableView»

C++, Qt, Базы данных

Отображение данных выборки в виджете QTableView

Предположим, что на форме расположен объект класса QStackedWidget, на страницах которого расположены объекты QTableView, отображающие различные данные. В один момент времени данные будут отображаться только в одном из виджетов QTableView (по одному на страницу stacked widget). Объявим модель для данных типа QSqlQueryModel: Продолжить чтение «Отображение данных выборки в виджете QTableView»

Qt

Добавление данных в таблицу QTableWidget. Очистка таблицы

Необходимо организовать добавление данных в таблицу QTableWidget. Для начала расположим на форме виджет класса QTableWidget с именем tableWidget. Создадим в таблице пару колонок, назвав их, скажем, «Колонка 1» и «Колонка 2».

Предположим, что в объекте map типа QMap<QString, QString> у нас хранятся некие данные, которые в определенный момент мы хотим разместить в табличке.

Прежде, чем организовать добавление данных в ячейки виджета, нужно их создать. Тогда, процесс заполнения таблицы будет выглядеть следующим образом: Продолжить чтение «Добавление данных в таблицу QTableWidget. Очистка таблицы»

Qt, Базы данных

Способы выполнения запросов к базе данных в Qt

В записи Подключение к базе данных в Qt я описала, каким образом в Qt можно создать подключение к базе. Теперь рассмотрим такую базовую операцию, как запрос на выборку данных. Сначала необходимо подключить следующие классы:

[pastacode lang=»cpp» manual=»%23include%20%3CQSqlQuery%3E%0A%23include%20%3CQSqlError%3E%20%2F%2F%D0%B4%D0%BB%D1%8F%20%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B0%20%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2%0A%23include%20%3CQDebug%3E%20%2F%2F%D0%B4%D0%BB%D1%8F%20%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B0%20%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BE%D1%87%D0%BD%D0%BE%D0%B9%20%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%B8″ message=»» highlight=»» provider=»manual»/]

Пусть в базе данных имеется таблица следующего вида:

[pastacode lang=»sql» manual=»CREATE%20TABLE%20tableName%0A(%0A%20%20id%20integer%20NOT%20NULL%2C%0A%20%20fieldName%20character%20varying(100)%20NOT%20NULL%2C%0A%20%20CONSTRAINT%20entities_pkey%20PRIMARY%20KEY%20(id)%0A)» message=»Таблица в PostgreSQL» highlight=»» provider=»manual»/]

В программе необходимо произвести выборку значений из этой таблицы по какому-то критерию: fieldName должно содержать в себе подстроку «имя»:

Способ 1: QString

[pastacode lang=»cpp» manual=»QSqlQuery%20query%3B%0Aif%20(!query.exec(QString(%22select%20*%20from%20tableName%20%22%0A%09%09%09%09%09%09%22where%20fieldName%20like%20’%251’%20%22%0A%09%09%09%09%09%20%20%20%22order%20by%20id%22).arg(%22%25%D0%B8%D0%BC%D1%8F%25%22)))%0A%09qDebug()%20%3C%3C%20query.lastError().text()%3B» message=»Через строку с параметрами» highlight=»» provider=»manual»/]

Задаем строку запроса, вместо изменяющихся величин задаем параметры через «%».

Способ 2: bindValue

[pastacode lang=»cpp» manual=»QSqlQuery%20query%3B%0Aquery.prepare(%22select%20*%20from%20tableName%20%22%0A%09%09%09%22where%20fieldName%20like%20%3Aparam%20%22%0A%09%09%09%22order%20by%20id%22)%3B%0Aquery.bindValue(%22%3Aparam%22%2C%20QVariant(%22%25%D0%B8%D0%BC%D1%8F%25%22))%3B%0Aif%20(!query.exec())%0A%09qDebug()%20%3C%3C%20query.lastError().text()%3B» message=»Через bindValue» highlight=»» provider=»manual»/]

Преобразование QVariant() передаст в запрос параметр нужного типа.

Способ 3. addBindValue

[pastacode lang=»cpp» manual=»QSqlQuery%20query%3B%0Aquery.prepare(%22select%20*%20from%20tableName%20%22%0A%09%09%09%22where%20fieldName%20like%20%3F%20%22%0A%09%09%09%22order%20by%20id)%3B%0Aquery.addBindValue(QVariant(%22%25%D0%B8%D0%BC%D1%8F%25%22))%3B%0Aif%20(!query.exec())%0A%09qDebug()%20%3C%3C%20query.lastError().text()%3B» message=»Через addBindValue» highlight=»» provider=»manual»/]

Здесь явно не указываются параметры. addBindValue последовательно по тексту запроса подставляет указанные значения параметров.

 

Qt, Базы данных

Qt. Динамическое создание виджетов на форме

Динамическое создание виджетов на форме может помочь, когда расположение и/или видимость виджетов подпадает под какие-то условия. Приведу пример. Допустим, в базе данных есть некая таблица, в которой хранятся настройки видимости, подписи, id наименований колонок основных таблиц базы, где хранятся важные данные:

[pastacode lang=»sql» manual=»CREATE%20TABLE%20table_settings%0A(%0Aid%20serial%20NOT%20NULL%2C%0Atable_id%20integer%20NOT%20NULL%2C%0Acolumn_id%20integer%2C%0Avisible%20boolean%20NOT%20NULL%20DEFAULT%20true%2C%0Acaption%20character%20varying(50)%2C%0Aname_%20character%20varying(50)%2C%0ACONSTRAINT%20table_settings_pkey%20PRIMARY%20KEY%20(id)%2C%0ACONSTRAINT%20table_settings_table_id_fkey%20FOREIGN%20KEY%20(table_id)%0AREFERENCES%20table_names%20(id)%20MATCH%20SIMPLE%0AON%20UPDATE%20CASCADE%20ON%20DELETE%20CASCADE%0A)» message=»» highlight=»» provider=»manual»/]

где

  • id — ID записи п/п
  • table_id — id таблицы, о колонках которой хранится информация
  • visible — должна ли быть данная колонка видна
  • caption — название колонки, которое задается пользователем
  • name_ — наименование колонки, которое задается при создании таблицы

[pastacode lang=»sql» manual=»CREATE%20TABLE%20table_names%0A(%0Aid%20serial%20NOT%20NULL%2C%0Aname_%20character%20varying%20NOT%20NULL%2C%0ACONSTRAINT%20table_names_pkey%20PRIMARY%20KEY%20(id)%2C%0ACONSTRAINT%20table_names_name__key%20UNIQUE%20(name_)%0A)» message=»» highlight=»» provider=»manual»/]

А это, собственно, та таблица, где хранятся наименования таблиц, для которых нам надо выставить некие настройки.

Для динамического создания виджетов (пусть в нашем примере это будут виджеты классов QLabel и QLineEdit — подпись и поле ввода) на форме разместим объект QGridLayout, куда мы будем «пихать» виджеты. Я еще делаю такой трюк: помещаю в layout объекты в ряд в таком количестве, как хочу видеть результат:

Динамическое создание виджетов на форме в Qt

Далее эти два виджета делаю невидимыми:

[pastacode lang=»cpp» manual=»ui-%3Elabel-%3EsetVisible(false)%3B%0Aui-%3ElineEdit-%3EsetVisible(false)%3B» message=»» highlight=»» provider=»manual»/]

Для того, чтобы не просто разместить виджеты на форме, но и потом брать из них информацию для наших нужд, объявим в отделе private класса формы объект класса QVector<QLineEdit*> lineEdits.

Теперь приступим непосредственно к динамическому созданию виджетов.

[pastacode lang=»cpp» manual=»QSqlQuery%20query%3B%0A%2F%2F%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%B5%D0%B4%D0%B5%D0%BC%20%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BA%D1%83%20%D0%BD%D0%B5%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B8%D0%BC%D1%8B%D1%85%20%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B9%20%D0%B8%D0%B7%20%D0%B1%D0%B0%D0%B7%D1%8B%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%0Aif%20(!query.exec(QString(%22select%20column_id%2C%20caption%2C%20name_%2C%20visible%20from%20table_settings%20%22%0A%22where%20%22%0A%22table_id%20%3D%20(select%20id%20from%20table_names%20where%20%22%0A%22name_%20%3D%20’products’)%20%22%0A%22order%20by%20column_id%22)))%0AqDebug()%20%3C%3C%20query.lastError().text()%3B%20%0Awhile%20(query.next())%20%7B%20%0A%09QLabel%20*newLabel%20%3D%20new%20QLabel(this)%3B%20%2F%2F%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%BE%D0%B5%20%D0%BD%D0%B0%D0%B8%D0%BC%D0%B5%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%BA%D0%BE%D0%BB%D0%BE%D0%BD%D0%BA%D0%B8%20newLabel-%3EsetText(query.value(1).toString()%2B%22%3A%22)%3B%0A%09newLabel-%3EsetObjectName(%22label%22%2Bquery.value(2).toString())%3B%0A%09%2F%2F%D0%B2%D0%B8%D0%B4%D0%B8%D0%BC%D1%8B%D0%B9%20%D0%B2%20%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8%20%D0%BE%D1%82%20%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D1%8F%20visible%20%D0%B2%20%D1%80%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82%D0%B0%D1%85%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0%0A%09newLabel-%3EsetVisible(query.value(3).toBool())%3B%0A%09%2F%2F%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%89%D0%B0%D0%B5%D0%BC%20%D0%B2%20layout%0A%09ui-%3EwidgetsLayout-%3EaddWidget(newLabel)%3B%20%2F%2FQGridLayout%0A%09QLineEdit%20*newEdit%20%3D%20new%20QLineEdit(this)%3B%0A%09newEdit-%3EsetObjectName(query.value(2).toString())%3B%0A%09newEdit-%3EsetVisible(query.value(3).toBool())%3B%0A%09ui-%3EwidgetsLayout-%3EaddWidget(newEdit)%3B%0A%09%2F%2F%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC%20%D0%B2%20%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80%0A%09lineEdits.push_back(newEdit)%3B%0A%7D%0A%2F%2F%D0%BF%D0%BE%D0%B4%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0%20%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%B0%20%D1%84%D0%BE%D1%80%D0%BC%D1%8B%20%D0%B2%20%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8%20%D0%BE%D1%82%20%D1%80%D0%B0%D1%81%D0%BF%D0%BE%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%BD%D1%8B%D1%85%20%D0%BD%D0%B0%20%D0%BD%D0%B5%D0%B9%20%D0%B2%D0%B8%D0%B4%D0%B6%D0%B5%D1%82%D0%BE%D0%B2%0Athis-%3Eresize(this-%3EsizeHint())%3B» message=»» highlight=»» provider=»manual»/]

Динамическое создание виджетов на форме в Qt

Чтобы обратится к отдельному объекту в векторе, достаточно указать его индекс:

[pastacode lang=»cpp» manual=»for%20(int%20i%20%3D%200%3B%20i%20%3C%20lineEdits.size()%3B%20%2B%2Bi)%0A%09qDebug()%20%3C%3C%20lineEdits%5Bi%5D-%3EobjectName()%20%3C%3C%20%22%20-%20%22%20%3C%3C%20lineEdits%5Bi%5D-%3Etext()%3B» message=»» highlight=»» provider=»manual»/]

Более элегантная и универсальная версия этого метода представлена здесь: Динамическое создание виджетов Qt. QGridLayout

Qt, Базы данных

Подключение к базе данных в Qt

Для подключения к базе данных нам необходимо включить в проект следующие классы:

[pastacode lang=»cpp» manual=»%23include%20%3CQMessageBox%3E%20%2F%2F%D0%B4%D0%BB%D1%8F%20%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B0%20%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8E%0A%23include%20%3CQSqlDatabase%3E%0A%23include%20%3CQSqlError%3E» message=»» highlight=»» provider=»manual»/]

QMessageBox позволит вывести информацию о статусе подключения к базе данных, QSqlDatabase позволит совершить это подключение, а без QSqlError мы не сможем узнать, какая ошибка возникла при неудачном подключении к базе.
Необходимо также в тексте файла проекта (*.pro) указать следующее:

QT += sql

[pastacode lang=»cpp» manual=»%2F*QPSQL%20-%20%D0%BD%D0%B0%D0%B7%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%B4%D1%80%D0%B0%D0%B9%D0%B2%D0%B5%D1%80%D0%B0%20%D0%B4%D0%BB%D1%8F%20%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BA%20%D1%82%D0%BE%D0%B9%20%D0%B8%D0%BB%D0%B8%20%D0%B8%D0%BD%D0%BE%D0%B9%20%D0%A1%D0%A3%D0%91%D0%94%2C%20%D0%B2%20%D0%B4%D0%B0%D0%BD%D0%BD%D0%BE%D0%BC%20%D1%81%D0%BB%D1%83%D1%87%D0%B0%D0%B5%20-%20%D0%BA%20PostgreSQL%3B%20%D0%B4%D0%BB%D1%8F%20%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BA%20%D0%B1%D0%B0%D0%B7%D0%B5%20MS%20SQL%20Server%20%D0%B2%D0%B0%D0%BC%20%D0%BD%D0%B5%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B8%D0%BC%D0%BE%20%D1%81%D0%BD%D0%B0%D1%87%D0%B0%D0%BB%D0%B0%20%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B8%D1%82%D1%8C%20%D0%B8%D1%81%D1%82%D0%BE%D1%87%D0%BD%D0%B8%D0%BA%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%20ODBC*%2F%0A%0AQSqlDatabase%20db%20%3D%20QSqlDatabase%3A%3AaddDatabase(%22QPSQL%22)%3B%20%20%2F*%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%20%D0%BD%D0%B0%D0%B8%D0%BC%D0%B5%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%B4%D1%80%D0%B0%D0%B9%D0%B2%D0%B5%D1%80%D0%B0%20%D0%91%D0%94%20%D1%82%D0%B0%D0%BA%D0%B6%D0%B5%20%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%20%D1%83%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D1%8C%20%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5%20%D0%BD%D0%B0%D0%B8%D0%BC%D0%B5%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BA%20%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D1%83%20%D0%91%D0%94%3A%20addDatabase(%22QPSQL%22%2C%20%22myConnection1%22)%0A%D0%B8%D0%BC%D1%8F%20%D0%B8%D0%BB%D0%B8%20%D0%B0%D0%B4%D1%80%D0%B5%D1%81%20%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0%2C%20%D0%B3%D0%B4%D0%B5%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%A1%D0%A3%D0%91%D0%94*%2F%0Adb.setHostName(%22localhost%22)%3B%0A%2F%2F%D0%B8%D0%BC%D1%8F%20%D0%B1%D0%B0%D0%B7%D1%8B%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%0Adb.setDatabaseName(%22myDB%22)%3B%0A%2F%2F%D0%B8%D0%BC%D1%8F%20%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F%0Adb.setUserName(%22user1%22)%3B%0A%2F%2F%D0%B5%D0%B3%D0%BE%20%D0%BF%D0%B0%D1%80%D0%BE%D0%BB%D1%8C%0Adb.setPassword(%22123321%22)%3B%0A%2F*%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D0%B2%D0%B0%D0%B5%D0%BC%20%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%3B%20%D0%B5%D1%81%D0%BB%D0%B8%20%D0%BD%D0%B5%D1%83%D0%B4%D0%B0%D1%87%D0%BD%D0%BE%20-%20%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B8%D0%BC%20%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BE%D0%B1%20%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B5*%2F%0Aif%20(!db.open())%0AQMessageBox%3A%3Acritical(NULL%2CQObject%3A%3Atr(%22%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0%22)%2Cdb.lastError().text())%3B» message=»» highlight=»» provider=»manual»/]

При попытке подключения к базе данных PostgreSQL можно получить сообщение об ошибке «Driver not loaded». Это значит, что ваша система не может найти драйвер PostgreSQL. Необходимо в системный путь (PATH) вписать пути к папкам lib и bin вашей версии СУБД.

При удачном подключении к базе данных все обращения к базе в вашем проекте будут автоматически распознавать это подключение. Если подключение было задано без наименования подключения, то оно будет расцениваться как подключение по умолчанию. В проекте обязательно должно быть такое подключение, иначе получим ошибку. Работая с потоками в проекте для каждого потока должно быть свое подключение под своим именем.

Подключение к базе данных Microsoft SQL Server в Qt.

Инфо обо мне: https://secretsilent.ru/info/

Qt

Контекстное меню в Qt. Popup Menu

Представим, что на форме нужен некий объект, при нажатии правой кнопкой мыши на который вызовется его контекстное меню. Чтобы организовать работу контекстного меню в конструкторе формы напишем

[pastacode lang=»cpp» manual=»ui-%3EpushButton-%3EsetContextMenuPolicy(Qt%3A%3ACustomContextMenu)%3B%0Aconnect(ui-%3EpushButton%2C%20SIGNAL(customContextMenuRequested(const%20QPoint%26))%2C%20%0A%09%09this%2C%20SLOT(ShowContextMenu(const%20QPoint%26)))%3B» message=»» highlight=»» provider=»manual»/]

Если мы привязываем объект pushButton. Здесь можно указать интересующий лично вас объект.

Дальше создаем функцию-слот ShowContextMenu(const QPoint&):

[pastacode lang=»cpp» manual=»void%20MyClass%3A%3AShowContextMenu(const%20QPoint%26%20pos)%0A%7B%0A%2F%2F%20for%20most%20widgets%0AQPoint%20globalPos%20%3D%20ui-%3EpushButton-%3EmapToGlobal(pos)%3B%0A%2F%2F%20for%20QAbstractScrollArea%20and%20derived%20classes%20you%20would%20use%3A%0A%2F%2F%20QPoint%20globalPos%20%3D%20myWidget-%3Eviewport()-%3EmapToGlobal(pos)%3B%0AQMenu%20myMenu%3B%0AmyMenu.addAction(%22%D0%9F%D1%83%D0%BD%D0%BA%D1%82%201%22%2C%20this%2C%20SLOT(on_action_1()))%3B%0AmyMenu.addAction(%22%D0%9F%D1%83%D0%BD%D0%BA%D1%82%202%22%2C%20this%2C%20SLOT(on_action_2()))%3B%0AmyMenu.exec(globalPos)%3B%0A%7D%0Avoid%20MyClass%3A%3Aon_action_1()%0A%7B%0A%2F%2F%D1%82%D0%B5%D0%BB%D0%BE%20%D1%81%D0%BB%D0%BE%D1%82%D0%B0%20on_action_1%0A%7D%0Avoid%20MyClass%3A%3Aon_action_2()%0A%7B%0A%2F%2F%D1%82%D0%B5%D0%BB%D0%BE%20%D1%81%D0%BB%D0%BE%D1%82%D0%B0%20on_action_2%0A%7D» message=»» highlight=»» provider=»manual»/]

Функцию ShowContextMenu(const QPoint&) не забываем вставить в список слотов в h-файле. Так же, как и слоты on_action_1() и on_action_2().

Слоты on_action_1() и on_action_2() отвечают за те действия, что произойдут после выбора соответствующих пунктов контекстного меню.

У метода addAction() есть несколько возможных параметров, можно указать иконку, сочетание клавиш как shortcut и пр. Описание можно найти в документации.