В чем разница между qmainwindow, qwidget и qdialog?

Структура программы

Запускать программу мы научились, теперь рассмотрим код из листинга 1.2 построчно. В первых строках подключаются необходимые заголовочные файлы:

Далее определяется функция , которая является точкой входа в приложение. Через первый параметр () доступно количество аргументов, переданных в командной строке. Следует учитывать, что первым аргументом является название исполняемого файла, поэтому значение параметра не может быть меньше единицы. Через второй параметр () доступны все аргументы в виде строки (тип ). Квадратные скобки после названия второго параметра означают, что доступен массив строк.

Инструкция

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

Результат при запуске программы:

Следующая инструкция

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

Инструкция

задает текст, который будет выводиться в заголовке окна. Следующая инструкция

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

Инструкция

создает объект надписи. Текст надписи задается в качестве параметра в конструкторе класса

Обратите внимание на то, что внутри строки мы указали HTML-теги. В данном примере с помощью тега произвели выравнивание текста по центру компонента

Возможность использования HTML-тегов и CSS-атрибутов является отличительной чертой библиотеки Qt. Например, внутри надписи можно вывести таблицу или отобразить изображение. Это очень удобно.

Следующая инструкция

создает объект кнопки. Текст, который будет отображен на кнопке, задается в качестве параметра в конструкторе класса

Обратите внимание на символ перед буквой «З». Таким образом задаются клавиши быстрого доступа

Если нажать одновременно клавишу и клавишу с буквой, перед которой в строке указан символ , то кнопка будет нажата.

Инструкция

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

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

Следующая инструкция

добавляет контейнер в основное окно с помощью метода . Таким образом, контейнер становится потомком основного окна.

Инструкция

назначает обработчик сигнала , который генерируется при нажатии кнопки. В первом параметре статического метода передается указатель на объект, генерирующий сигнал, а во втором параметре — название сигнала с помощью макроса . В третьем параметре передается указатель на объект, принимающий сигнал, а в четвертом параметре — метод этого объекта, который будет вызван при наступлении события. Метод указывается в качестве параметра макроса . Этот метод принято называть слотом. В нашем примере получателем сигнала является объект приложения, доступный также через указатель . При наступлении события будет вызван метод , который завершит работу всего приложения. Пример указания макроса :

Следующая инструкция

отображает окно и все компоненты, которые мы ранее добавили. И, наконец, инструкция

запускает бесконечный цикл обработки событий. Инструкции, расположенные после вызова метода , будут выполнены только после завершения работы приложения. Так как результат выполнения метода мы возвращаем из функции , дальнейшее выполнение программы будет прекращено, а код возврата передан операционной системе.

mainwindow.cpp

Инициализация обоих второстепенных окон производится в главном окне и с помощью системы сигналов и слотов эти окна показываются по сигналам от кнопок в главном окне. При этом главное окно будет закрываться.

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    // Инициализируем второе окно
    sWindow = new AnotherWindow();
    // подключаем к слоту запуска главного окна по кнопке во втором окне
    connect(sWindow, &AnotherWindow::firstWindow, this, &MainWindow::show);

    // Инициализируем третье окно
    thirdWindow = new AnotherWindow();
    // подключаем к слоту запуска главного окна по кнопке в третьем окне
    connect(thirdWindow, &AnotherWindow::firstWindow, this, &MainWindow::show);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    sWindow->show();  // Показываем второе окно
    this->close();    // Закрываем основное окно
}

void MainWindow::on_pushButton_2_clicked()
{
    thirdWindow->show();  // Показываем третье окно
    this->close();    // Закрываем основное окно
}

Подробный QDialog основных элементов управления PyQt5 (12)

y http-equiv=»Content-Type» content=»text/html;charset=UTF-8″>le=»margin-bottom:5px;»>Теги:  QDialog  PyQt5

QDialog

предисловие

Подклассы класса QDialog в основном включают QMessageBox, QFileDialog, QColorDialog, QFontDialog, QInputDialog и т. Д. Это содержимое будет представлено позже

Общие методы в классе QDialog

метод описание
setWindowTitle() Установить заголовок диалога
setWindowModality() Установить модальное окно, значения следующие
Qt.NonModal: немодальный, может взаимодействовать с другими окнами программы
Qt.WindowModal: модальное окно, программа будет препятствовать взаимодействию с родительским окном диалога, когда программа не обрабатывает текущий диалог
Qt.ApplicationModal: модальное приложение, предотвращающее взаимодействие с любым другим окном

Пример: использование QDialog

Запустите программу, эффект отображения выглядит следующим образом — Анализ кода:

Загрузите исходный код и связанные файлы:https://download.csdn.net/download/jia666666/10597897

Интеллектуальная рекомендация

1. Для реальных сигналов (для понимания): A (ω) является соотношением амплитуды выходного сигнала и амплитуды входного сигнала, называемого частотой амплитуды. Φ (ω) — это разница межд…

Один. вести Многие люди задавали некоторые вопросы о создании проекта Flex + LCDS (FDS) в сообщениях и группах. Из-за операции ее трудно четко объяснить, поэтому я написал простой учебник (я обещал эт…

package com.example.phonehttp; import android.os.Bundle; import android.os.Handler; import android.app.Activity; import android.widget.ScrollView; import android.widget.TextView; public class MainActi…

Он предназначен для реализации подкласса того же родительского класса с родительским классом. Полиморфизм Один и тот же ссылочный тип использует разные экземпляры для выполнения разных операций; Идея …

тема: Объедините два упорядоченных слоя в новый заказанный список и возврат. Новый список состоит из всех узлов двух связанных списков, данных сплавным. Пример: Анализ: два связанных списка состоит в …

Вам также может понравиться

D. Самая ценная строка Пример ввода 2 2 aa aaa 2 b c Образец вывода aaa c На самом деле, будучи задетым этим вопросом, вы должны быть осторожны. После инвертирования строки, если две строки имеют один…

Given a 2D integer matrix M representing the gray scale of an image, you need to design a smoother to make the gray scale of each cell becomes the average gray scale (rounding down) of all the 8 surro…

calc () может быть очень незнакомым для всех, и трудно поверить, что calc () является частью CSS. Поскольку он выглядит как функция, почему он появляется в CSS, поскольку это функция? Этот момент такж…

Основываясь на дереве регрессии, сформированном CART, а также на предварительной и последующей обрезке дерева, код выглядит следующим образом:…

Откат Обновление в режиме онлайн с версии Centos (CentOS Linux версии 7.3.1611 (Core) до CentOS Linux версии 7.5.1804 (Core)) # ошибка соединения yum-ssh после обновления yexpected key exchange group …

mainwindow.h

В заголовочном файле главного окна приложения необходимо подключить заголовочный файл окна второстепенного приложения.

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <anotherwindow.h>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    // Слоты от кнопок главного окна
    void on_pushButton_clicked();
    void on_pushButton_2_clicked();

private:
    Ui::MainWindow *ui;
    // второе и третье окна
    AnotherWindow *sWindow;
    AnotherWindow *thirdWindow;
};

#endif // MAINWINDOW_H

Widget

Далее нужно добавить инстансы данных классов в главное окно приложения. Для наглядности сделаем это вручную.

Widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

class FirstForm;
class SecondForm;

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;
    FirstForm *m_firstForm;
    SecondForm *m_secondForm;
};

#endif // WIDGET_H

Widget.cpp

#include "Widget.h"
#include "ui_Widget.h"

#include "FirstForm.h"
#include "SecondForm.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    m_firstForm = new FirstForm(this);
    m_secondForm = new SecondForm(this);

    ui->verticalLayout->addWidget(m_firstForm);
    ui->verticalLayout->addWidget(m_secondForm);
}

Widget::~Widget()
{
    delete ui;
}

Строка состояния

Строка состояния (англ. «statusbar») — это панель, которая используется для отображения информации о состоянии приложения. Виджет является частью виджета .

В следующем примере у нас есть две кнопки и одна строка состояния. При нажатии на кнопку будет отображаться соответствующее сообщение.

Заголовочный файл — statusbar.h:

#pragma once

#include <QMainWindow>
#include <QPushButton>

class Statusbar : public QMainWindow {

Q_OBJECT

public:
Statusbar(QWidget *parent = 0);

private slots:
void OnOkPressed();
void OnApplyPressed();

private:
QPushButton *okBtn;
QPushButton *aplBtn;
};

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

#pragma once
 
#include <QMainWindow>
#include <QPushButton>
 

classStatusbarpublicQMainWindow{

Q_OBJECT  

public

Statusbar(QWidget*parent=);

privateslots

voidOnOkPressed();

voidOnApplyPressed();

private

QPushButton*okBtn;

QPushButton*aplBtn;

};

Файл реализации — statusbar.cpp:

#include <QLabel>
#include <QFrame>
#include <QStatusBar>
#include <QHBoxLayout>
#include «statusbar.h»

Statusbar::Statusbar(QWidget *parent)
: QMainWindow(parent) {

QFrame *frame = new QFrame(this);
setCentralWidget(frame);

QHBoxLayout *hbox = new QHBoxLayout(frame);

okBtn = new QPushButton(«OK», frame);
hbox->addWidget(okBtn, 0, Qt::AlignLeft | Qt::AlignTop);

aplBtn = new QPushButton(«Apply», frame);
hbox->addWidget(aplBtn, 1, Qt::AlignLeft | Qt::AlignTop);

statusBar();

connect(okBtn, &QPushButton::clicked, this, &Statusbar::OnOkPressed);
connect(aplBtn, &QPushButton::clicked, this, &Statusbar::OnApplyPressed);
}

void Statusbar::OnOkPressed() {
statusBar()->showMessage(«OK button pressed», 2000);
}

void Statusbar::OnApplyPressed() {
statusBar()->showMessage(«Apply button pressed», 2000);
}

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
27
28
29
30
31
32
33

#include <QLabel>
#include <QFrame>
#include <QStatusBar>
#include <QHBoxLayout>
#include «statusbar.h»
 

Statusbar::Statusbar(QWidget*parent)

QMainWindow(parent){

QFrame*frame=newQFrame(this);

setCentralWidget(frame);

QHBoxLayout*hbox=newQHBoxLayout(frame);

okBtn=newQPushButton(«OK»,frame);

hbox->addWidget(okBtn,,Qt::AlignLeft|Qt::AlignTop);

aplBtn=newQPushButton(«Apply»,frame);

hbox->addWidget(aplBtn,1,Qt::AlignLeft|Qt::AlignTop);

statusBar();

connect(okBtn,&QPushButton::clicked,this,&Statusbar::OnOkPressed);

connect(aplBtn,&QPushButton::clicked,this,&Statusbar::OnApplyPressed);

}
 

voidStatusbar::OnOkPressed(){

statusBar()->showMessage(«OK button pressed»,2000);

}
 

voidStatusbar::OnApplyPressed(){

statusBar()->showMessage(«Apply button pressed»,2000);

}

Виджет помещается в центральную область виджета . Центральную область может занимать только один виджет:

QFrame *frame = new QFrame(this);
setCentralWidget(frame);

1
2

QFrame*frame=newQFrame(this);

setCentralWidget(frame);

Мы создаем два виджета и компонуем их вдоль горизонтальной линии. Родительским элементом кнопок является виджет :

okBtn = new QPushButton(«OK», frame);
hbox->addWidget(okBtn, 0, Qt::AlignLeft | Qt::AlignTop);

aplBtn = new QPushButton(«Apply», frame);
hbox->addWidget(aplBtn, 1, Qt::AlignLeft | Qt::AlignTop);

1
2
3
4
5

okBtn=newQPushButton(«OK»,frame);

hbox->addWidget(okBtn,,Qt::AlignLeft|Qt::AlignTop);

aplBtn=newQPushButton(«Apply»,frame);

hbox->addWidget(aplBtn,1,Qt::AlignLeft|Qt::AlignTop);

Для отображения строки состояния мы вызываем метод statusBar() виджета :

statusBar();

1 statusBar();

Метод showMessage() отображает сообщение в строке состояния. Последний параметр указывает количество миллисекунд, в течение которых сообщение отображается в строке состояния:

void Statusbar::OnOkPressed() {
statusBar()->showMessage(«OK button pressed», 2000);
}

1
2
3

voidStatusbar::OnOkPressed(){

statusBar()->showMessage(«OK button pressed»,2000);

}

Основной файл программы — main.cpp:

#include <QApplication>
#include «statusbar.h»

int main(int argc, char *argv[]) {

QApplication app(argc, argv);

Statusbar window;

window.resize(300, 200);
window.setWindowTitle(«QStatusBar»);
window.show();

return app.exec();
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

#include <QApplication>
#include «statusbar.h»
 

intmain(intargc,char*argv){

QApplication app(argc,argv);

Statusbar window;

window.resize(300,200);

window.setWindowTitle(«QStatusBar»);

window.show();

returnapp.exec();

}

Результат выполнения программы:

Принципы работы с библиотекой

Формы с использованием классов Qt могут создаваться вручную или с использованием специального пакета QtDesigner. При создании форм вручную программист кодирует текст программы, включая по мере необходимости вызовы объектов классов Qt. При использовании QtDesigner программист графически компонует внешний вид и связи сигналов и слотов формы, а компилятор интерфейса UIC формирует из полученного описания формы код на языке C++ (язык программирования), обеспечивающий создание этой формы.

Библиотека включает в себя :

  • Среду для разработки графического интерфейса.
  • Компилятор мета-объектов.
  • Набор классов для работы.

Библиотека Qt является безусловным лидером среди имеющихся средств разработки межплатформенных программ на языке C++ (язык программирования). Широко известная и часто используемая в мире Linix, она, благодаря распространению графической оболочки KDE, стала де-факто стандартом проектирования программного обеспечения на этой платформе. К сожалению, для разработчиков Microsoft Windows-приложений библиотека Qt долгое время не выходила на передний план, поскольку для Microsoft Windows существовали более доступные и удобные средства быстрой разработки программ.

Компиляция и сборка программы осуществляется компилятором C++ (язык программирования) и компоновщиком, доступными в рамках платформы, где осуществляется сборка

Рис.1. Схема сборки приложения, реализованного вручную

К таким средствам в частности относятся сигналы и слоты, поддержка которых для конкретного диалога также генерируется автоматически в коде отдельной программы C++ (язык программирования).

Сигналы и слоты

Ключевым механизмом взаимодействия объектов в Qt являются сигналы и слоты.
Каждый объект, интегрированный в систему управления Qt, т.е. описанный как Q_OBJECT, может иметь типизированные слоты, обеспечивающие прием и обработку типизированных сигналов от других объектов, и собственные сигналы, прием которых могут осуществлять другие объекты. Связь между сигналами и слотами конкретных объектов устанавливается посредством функции connect.

Рис. 2. Схема связывания сигналов и слотов объекта

По правилам Qt один слот может принимать несколько сигналов, а один сигнал транслироваться на несколько слотов. Следует отметить, что механизм слотов не исключает возможности использования средств наследования и полиморфизма языка C++ (язык программирования), так что любой класс Qt может быть переопределен.

Использование QtDesigner

При необходимости быстрого получения результата, проведения экспериментов по размещению объектов, общей оценки интерфейса возможно использование специального редактора интерфейсов QtDesigner. QtDesigner не накладывает никаких ограничений на средства разработки, поскольку интерфейс, созданный им, в конечном счете будет преобразован компилятором
в код программы на языке C++, обеспечивающий создание именно этого интерфейса.

Диалоги, созданные в QtDesigner также могут подключаться в программу динамически посредством класса QFormBuilder или QWidgetFactory::create(«form.ui») в Qt3.x без необходимости генерации и компиляции кода их создания на С++.

Рис.3. Схема сборки приложения с формами, сделанными в QtDesigner

Система документации

Библиотека Qt снабжена системой документации QtAssistant, реализованной единообразно для всех платформ, на которых возможна разработка с использованием этой библиотеки.

Рис.4. Справочная документация — приложение QtAssistant

Для ОС Windows исполняемый файл системы документации имеет имя , по которому его можно запустить из консоли «Qt Command Prompt».

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

mainwindow.cpp

В этом файле заключена цель всего урока, а именно настройка QTableWidget и заполнение его записями из базы данных.

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    this->setWindowTitle("QTableWidget Example");
    /* Первым делом необходимо создать объект для работы с базой данных
     * и инициализировать подключение к базе данных
     * */
    db = new DataBase();
    db->connectToDataBase();

    /* Наполним базу данных записями */
    for(int i = 1; i < 5; i++){
        /* Вставляем запись в таблицу, сразу устанавливаем состояние чекбокса.
         * Если устройство имеет нечётный номер, то статус чекбокса true,
         * иначе false
         * */
        db->inserIntoDeviceTable(QVariantList() << QString::number(i & 1)
                                                << "Device " + QString::number(i)
                                                << "192.168.0." + QString::number(i)
                                                << "AA:AA:AA:AA:AA:A" + QString::number(i));
    }

    /* Настраиваем внешний вид таблицы
     * с заданием названий колонок, а также
     * Заполняем таблицу записями из базы данных
     * */
    this->createUI(QStringList() << trUtf8("id")
                                 << trUtf8("Нечетность")
                                 << trUtf8("Имя компьютера")
                                 << trUtf8("IP адрес")
                                 << trUtf8("MAC адрес")
               );
}

MainWindow::~MainWindow()
{
    delete ui;
}

/* Метод для настройки интерфейса,
 * в данном методе будет выполняться заполнение QTableWidget
 * записями из таблицы
 * */
void MainWindow::createUI(const QStringList &headers)
{
    ui->tableWidget->setColumnCount(5); // Указываем число колонок
    ui->tableWidget->setShowGrid(true); // Включаем сетку
    // Разрешаем выделение только одного элемента
    ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
    // Разрешаем выделение построчно
    ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
    // Устанавливаем заголовки колонок
    ui->tableWidget->setHorizontalHeaderLabels(headers);
    // Растягиваем последнюю колонку на всё доступное пространство
    ui->tableWidget->horizontalHeader()->setStretchLastSection(true);
    // Скрываем колонку под номером 0
    ui->tableWidget->hideColumn(0);

    // Создаём запрос для для выборки записей из базы данных
    QSqlQuery query("SELECT "
                    DEVICE ".id, "
                    DEVICE "." DEVICE_CHECK_STATE ", "
                    DEVICE "." DEVICE_HOSTNAME ", "
                    DEVICE "." DEVICE_IP ", "
                    DEVICE "." DEVICE_MAC
                    " FROM " DEVICE);

    /* Выполняем заполнение QTableWidget записями с помощью цикла
     * */
    for(int i = 0; query.next(); i++){
        // Вставляем строку
        ui->tableWidget->insertRow(i);
        /* Устанавливаем в первую колонку id забирая его из результата SQL-запроса
         * Эта колонка будет скрыта
         * */
        ui->tableWidget->setItem(i,0, new QTableWidgetItem(query.value(0).toString()));

        // Создаём элемент, который будет выполнять роль чекбокса
        QTableWidgetItem *item = new QTableWidgetItem();
        item->data(Qt::CheckStateRole);
        /* Проверяем, на статус нечетности, если нечетное устройство, то
         * выставляем состояние чекбокса в Checked, иначе в Unchecked
         * */
        if(query.value(1).toInt() == 1){
            item->setCheckState(Qt::Checked);
        } else {
            item->setCheckState(Qt::Unchecked);
        }
        // Устанавливаем чекбокс во вторую колонку
        ui->tableWidget->setItem(i,1, item);
        // Далее забираем все данные из результата запроса и устанавливаем в остальные поля
        ui->tableWidget->setItem(i,2, new QTableWidgetItem(query.value(2).toString()));
        ui->tableWidget->setItem(i,3, new QTableWidgetItem(query.value(3).toString()));
        ui->tableWidget->setItem(i,4, new QTableWidgetItem(query.value(4).toString()));
    }

    // Ресайзим колонки по содержимому
    ui->tableWidget->resizeColumnsToContents();
}

qdynamicbutton.cpp

В файле исходного кода класса-обёртки производится инициализация кнопки в её конструкторе, инициализация статической переменной, а также находится метод для возврата номера динамической кнопки.

#include "qdynamicbutton.h"

QDynamicButton::QDynamicButton(QWidget *parent) :
    QPushButton(parent)
{
    ResID++;            // Увеличение счетчика на единицу
    buttonID = ResID;   /* Присвоение кнопке номера, по которому будет производиться
                         * дальнейшая работа с кнопок
                         * */

}

QDynamicButton::~QDynamicButton()
{

}

/* Метод для возврата значения номера кнопки
 * */
int QDynamicButton::getID()
{
    return buttonID;
}

/* Инициализация статической переменной класса.
 * Статическая переменная класса должна инициализироваться в обязательном порядке
 * */
int QDynamicButton::ResID = 0;

Member Function Documentation

QDialog::QDialog( *parent = nullptr, f = Qt::WindowFlags())

Constructs a dialog with parent parent.

A dialog is always a top-level widget, but if it has a parent, its default location is centered on top of the parent. It will also share the parent’s taskbar entry.

The widget flags f are passed on to the QWidget constructor. If, for example, you don’t want a What’s This button in the title bar of the dialog, pass | in f.

See also ().

Hides the modal dialog and sets the result code to .

See also () and ().

void QDialog::accepted()

This signal is emitted when the dialog has been accepted either by the user or by calling () or () with the argument.

Note that this signal is not emitted when hiding the dialog with () or (false). This includes deleting the dialog while it is visible.

This function was introduced in Qt 4.1.

See also () and ().

void QDialog::done(int r)

Closes the dialog and sets its result code to r. The () signal will emit r; if r is or , the () or the () signals will also be emitted, respectively.

If this dialog is shown with (), done() also causes the local event loop to finish, and () to return r.

As with (), done() deletes the dialog if the flag is set. If the dialog is the application’s main widget, the application terminates. If the dialog is the last window closed, the () signal is emitted.

See also (), (), (), and ().

int QDialog::exec()

Shows the dialog as a , blocking until the user closes it. The function returns a result.

If the dialog is , users cannot interact with any other window in the same application until they close the dialog. If the dialog is , only interaction with the parent window is blocked while the dialog is open. By default, the dialog is application modal.

Note: Avoid using this function; instead, use . Unlike exec(), () is asynchronous, and does not spin an additional event loop. This prevents a series of dangerous bugs from happening (e.g. deleting the dialog’s parent while the dialog is open via exec()). When using () you can connect to the () signal of QDialog to be notified when the dialog is closed.

See also (), (), (), and ().

void QDialog::finished(int result)

This signal is emitted when the dialog’s result code has been set, either by the user or by calling (), (), or ().

Note that this signal is not emitted when hiding the dialog with () or (false). This includes deleting the dialog while it is visible.

This function was introduced in Qt 4.1.

See also () and ().

Shows the dialog as a , returning immediately.

This function was introduced in Qt 4.5.

See also (), (), (), and ().

Hides the modal dialog and sets the result code to .

See also () and ().

void QDialog::rejected()

This signal is emitted when the dialog has been rejected either by the user or by calling () or () with the argument.

Note that this signal is not emitted when hiding the dialog with () or (false). This includes deleting the dialog while it is visible.

This function was introduced in Qt 4.1.

See also () and ().

int QDialog::result() const

In general returns the modal dialog’s result code, or .

Note: When called on a QMessageBox instance, the returned value is a value of the enum.

Do not call this function if the dialog was constructed with the attribute.

See also ().

Sets the modal dialog’s result code to i.

Note: We recommend that you use one of the values defined by .

See also ().

Подробное описание

Это абстрактный базовый класс, унаследованный от конкретных классов QBoxLayout , QGridLayout , QFormLayout и QStackedLayout .

Для пользователей подклассов QLayout или QMainWindow редко возникает необходимость использовать базовые функции, предоставляемые QLayout, такие как () или (). См. Дополнительную информацию в разделе « Управление компоновкой» .

Чтобы создать свой собственный менеджер компоновки, реализуйте функции (), (), (), () и (). Вы также должны реализовать (), чтобы гарантировать, что размер вашего макета не будет уменьшен до нулевого размера, если места слишком мало. Для поддержки детей, высота которых зависит от их ширины, реализуйте () и (). См. Примеры Border Layout и Flow Layout для получения дополнительной информации о реализации настраиваемых менеджеров компоновки.

Управление геометрией останавливается при удалении менеджера макетов.

Простейшие элементы ввода-вывода

Класс QString

Для работы со строками в Qt используется класс Qstring. Основной особенностью этого класса является то, что внутреннее хранение и все операции над строками проводятся в кодировке UNICODE. Класс позволяет преобразовывать текст из различных кодировок строки в формат C и обратно. Реализуется операции склейки, добавления, сравнения, вырезания подстроки и пр.

При работе со строками в Qt следует помнить, что любой текст, в котором присутствуют символы, отличные от основного латинского алфавита (с кодами более 128), следует явно преобразовывать в UNICODE одним из ниже представленных способов.

Второй вариант основан на том, что Qt изначально ориентирована на написание многоязычных приложений, следовательно весь текст, написание которого зависит от региона использования, должен быть вынесен за пределы кода программы.

QString str = tr(«Some text»)

Класс QLineEdit

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

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

Методы:

  • — возвращает текст, содержащейся в текстовом поле.
  • — возвращает текст, отображаемый текстовым полем. Отличается от метода тем, что в случае использования режима ввода пароля, вернет строку, содержащую символы-заменители.

Слоты:

  • — очищает текстовое поле.
  • — устанавливает текстовую строку, переданную в качестве параметра.
  • — устанавливает запрет (true) или разрешения (false) редактирования. В случае запрета редактирования текст всё равно будет отображаться, а изменения значения возможно методом .

Класс QTextEdit

Предназначен для отображения и редактирования текста, который не может быть представлен в виде одной строки. Позволяет использовать как «плоский текст», т.е. текст, не имеющий разметки, так и текст, в котором используются разные шрифты и способы начертания символов (жирный, курсив), а также возможности оформления абзацев, списков.

Рис.5. Класс QTextEdit

Методы:

  • — устанавливает запрет (true) или разрешения (false) редактирования.
  • — получить текст в формате, который использован в данный момент.
  • — получить текст с разметкой в формате HTML
  • — получить текст в «плоском» формате, т. е. текст без разметки.

Слоты:

  • — добавить новую строку в конец текста. Строка будет содержать символ перевода строки.
  • — вставить в позицию курсора текст, содержащийся в переменной text, с разметкой в формате HTML и без разметки, соответственно.

Класс QLabel

Предназначен для отображения надписей. Используется в тех случаях,когда ввод не предусмотрен, а надпись необходимо разместить в качестве сопроводительного элемента оформления формы.

Методы:

  • — конструктор, позволяющий создать надпись, содержащую текст text для виджета parent и флагами.
  • — получить текст, содержащийся в надписи.

Слоты:

  • ;
  • ;
  • — установить в качестве надписи целое число, число с двойной точностью, строку, соответственно.

В тех случаях, когда необходимо запросить у пользователя какой-либо параметр, возможно применение стандартных диалогов ввода, реализованных на базе класса QinputDialog. Класс имеет статические методы , , , , предназначенные для получения числа двойной точности, целого числа, строки из массива на выбор пользователя, а также произвольно вводимый текст, соответственно.

Рис.6. Типовой пример использования класса QitputDialog

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: