Подробные шаги и код для использования QT для визуального проектирования диалоговых окон.

1. Основные шаги по созданию диалогового окна

  • Создание и инициализация дочерних виджетов
  • Размещение дочерних виджетов в макете
  • Установить порядок табуляции
  • Установите соединения сигнального слота
  • Реализация пользовательских слотов в диалоговых окнах

Прежде всего, первые три шага выполняются непосредственно через ui-файл, а оставшиеся два шага реализуются через код.

2. Подробные шаги по созданию проекта

Создать новый проект

Назовите проект

 

 Назовите класс и выберите базовый класс как QDialog.

[Если здесь не выбран QDialog, но выбран QMainWindow по умолчанию, это приведет к тому, что функция setupUi сообщит об ошибке при дальнейшем запуске]

3. Подробные шаги по проектированию и реализации визуального диалогового интерфейса пользовательского интерфейса.

Дважды щелкните файл gotocelldialog.ui, чтобы открыть интерфейс дизайна. Левая сторона — это панель инструментов, а правая — интерфейс дизайна. Вам нужно только перетащить компоненты слева в интерфейс.

Сначала перетащите на интерфейс метку, редактор линий, горизонтальный разделитель и две кнопки.

Затем измените текст компонента Label на ——&Cell Location:

Измените свойства первой кнопки, измените ее текст на --OK, имя объекта на --okButton, свойство Enable на false и свойство по умолчанию на --true.

 

Измените свойства второй кнопки, измените ее текст на -Cancel и измените имя объекта на -cancelButton.

Измените заголовок и имя всей формы — щелкните пустую область и затем просмотрите раздел свойств.

На этом настройка атрибутов компонента завершена.

В это время интерфейс выглядит следующим образом:

Следующим шагом будет связывание компонентов и разработка макета.

Привязать компонент lable к компоненту lineEdit, нажать "Редактировать" в левом верхнем углу - выбрать "Редактировать друзей" - нажать Lable и соединить красную стрелку с lineEdit - нажать "Редактировать" в левом верхнем углу - выбрать "Редактировать виджет" Вот и все

Разработать макет

Выбрать метку и линию. Редактировать одновременно – правая кнопка мыши – макет – горизонтальный макет.

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

Выделить пустое место в форме - правая кнопка мыши - макет - настроить размер - настроить нужный размер - выбрать пустое место в форме - правая кнопка мыши - макет - вертикальное расположение

Итоговые результаты проектирования макета следующие:

 

Установить порядок табуляции

Нажмите «Редактировать» в левом верхнем углу — выберите «Редактировать порядок вкладок» — выберите нужный порядок.

4. Реализация диалогового окна

①Первоначальная реализация — используйте форму, созданную в пользовательском интерфейсе, создайте объект QDialog, передайте объект в форму, запустите

Вам нужно только написать код в файле main.cpp.

#include "gotocelldialog.h"

#include <QApplication>
#include<QDialog>
#include"ui_gotocelldialog.h"


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //定义窗体、创建QDialog对象、将对象传递给窗体【对话框能展示,但功能没有实现】
    Ui::GoToCellDialog ui;//定义该窗体
    QDialog *dialog=new QDialog;//创建一个QDialog对象
    ui.setupUi(dialog);//把QDialog对象传递给setupUi函数
    dialog->show()
    return a.exec();
}

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

②Расширенная реализация — определение нового класса для наследования класса GoToCellDialog, инициализированного Ui и QDialog, и использование сигналов и слотов для реализации функций.

 Код gotocelldialog.h [новое определение класса]

#ifndef GOTOCELLDIALOG_H
#define GOTOCELLDIALOG_H

#include<QDialog>
#include"ui_gotocelldialog.h"

//创建一个新类,让此类同时从QDialog和Ui::GoToCellDialog中继承出来,并且实现前面所涉及的窗体中所需要实现的功能
class GoToCellDialog : public QDialog,public Ui::GoToCellDialog
{
    Q_OBJECT

public:
    GoToCellDialog(QWidget *parent = nullptr);//构造函数
    ~GoToCellDialog();//析构函数
private slots:
    void on_lineEdit_textChange();//实现对OK按钮的启用/禁用
private:
    Ui::GoToCellDialog *ui;
};
#endif // GOTOCELLDIALOG_H

Код gotocelldialog.cpp [привязка и реализация сигналов и слотов]

#include<QtGui>
#include "gotocelldialog.h"

//构造函数的实现
GoToCellDialog::GoToCellDialog(QWidget *parent)
    : QDialog(parent)
{
    setupUi(this);//初始化窗体

    //设置一个检验器来限制输入的范围  QRegExpValidator内置检验器后面带一个正则表达式
    QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}");//正则表达式
    //允许一个大写/小写字母,后面跟着一个范围为1-9的数字,后面再跟一个0个、1个或者2个0-9的数字
    lineEdit->setValidator(new QRegExpValidator(regExp,this));

    //第一个connect已经通过setupUi自动建立了
    //因为setupUi()函数会自动将那些符合on_objectName_signalName()命名惯例的任意槽与其相应的objectName的signalName()信号连接到一起
    //connect(lineEdit,SIGNAL(textChange(const QString &)),this,SLOT(on_lineEdit_textChange()));
    //accept()槽是QDialog的,其可以将对话框返回的结果变量设置为QDialog::Accept(其值等于1)
    connect(okButton,SIGNAL(clicked()),this,SLOT(accept()));//当点击OK按钮时,触发accept()槽
    //reject()槽是QDialog的,其可以将对话框的值设置为QDialog::Reject(其值等于0)
    connect(cancelButton,SIGNAL(clicked()),this,SLOT(reject()));//当点击Cancel按钮时,触发reject()槽
    //可以利用对话框的结果变量判断用户是否单击了OK按钮
}

//实现对OK按钮的启用/禁用
void GoToCellDialog::on_lineEdit_textChange(){
    //根据行编辑器中是否包含了有效的单元格位置坐标,从而实现对OK按钮的启用或者禁用
    //hasAcceptableInput()用于判断行编辑器中内容的有效性  有效则禁用,无效则启用
    okButton->setEnabled(lineEdit->hasAcceptableInput());
}

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

код main.cpp

#include "gotocelldialog.h"

#include <QApplication>
#include<QDialog>
#include"ui_gotocelldialog.h"


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //进阶想法——定义新类继承Ui初始化的类还有QDialog并利用信号-槽实现功能
    GoToCellDialog *dialog=new GoToCellDialog;
    dialog->show();
    return a.exec();
}

результат операции:

Когда текст в редакторе строк не соответствует требованиям ввода, ввод не допускается и кнопка «ОК» неактивна; когда содержимое в редакторе строк соответствует требованиям ввода, кнопка «ОК» активна

 

Supongo que te gusta

Origin blog.csdn.net/m0_59800431/article/details/132276961
Recomendado
Clasificación