编程知识 cdmana.com

Application des composants de la boîte de dialogue C / C + + Qt Custom dialog

Dans le dernier billet de blog 《C/C++ Qt CritèresDialogApplication des composants de la boîte de dialogue》 Je vous ai montré comment utiliserQtLa boîte de dialogue standard intégrée permet la saisie de données de base.

Mais parfois, nous devons modifier plusieurs données à la fois,L'utilisation de la boîte de dialogue modale par défaut ne semble pas suffisante,À ce stade, nous devons créer une boîte de dialogue personnalisée nous - mêmes,Ce type de boîte de dialogue est aussi un formulaire,Donc vous pouvez placer n'importe quel composant universel dessus,Pour répondre à des besoins de développement plus complexes.

La boîte de dialogue personnalisée communique actuellement avec le formulaire principal de deux façons,L'un est parLa fonction implémente la communication,L'autre est parLe signal permet la communication,Nous sommes basés sur la communication par fonction,Expliquez comment vous pouvez communiquer entre les formulaires.

Vous devez d'abord créer une boîte de dialogue personnalisée,Le processus spécifique de création de la boîte de dialogue est le suivant

  • Sélectionner les éléments -> AddNew -> QT -> QtClasse d'interface Designer -> Sélectionner blancDialog -> NomméDialogEnregistrer

Sélectionner directementDianlog.uiEt dessiner l'interface comme suit,Une boîte d'édition,Deux boutons.

Ensuite, il fautDialog Ajouter à la boîte de dialogue Deux signaux.,Respectivement.Cliquez surEtFermer, Et relier le signal aux deux fonctions de fente , Son signal doit être écrit comme suit .

Puis on allume dialog.cpp Cette classe est la classe de dialogue , Deux fonctions membres doivent être définies dans la classe , Leurs fonctions sont les suivantes :

  • Le premier GetValue() Utilisé pour obtenir les données dans la zone d'édition courante et retourner les données au formulaire parent .
  • Deuxième SetValue() Pour recevoir les paramètres entrants , Et définissez ce paramètre dans la zone d'édition de votre formulaire .
#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :QDialog(parent),ui(new Ui::Dialog)
{
    ui->setupUi(this);
}

// PourMainWindow Obtenir les données dans la zone d'édition 
QString Dialog::GetValue()
{
    return ui->lineEdit->text();
}

//  Utilisé pour définir les données dans la zone d'édition courante comme MainWindow
// https://www.cnblogs.com/lyshark
void Dialog::SetValue(QString x)
{
    ui->lineEdit->setText(x);
}

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

void Dialog::on_BtnOk_clicked()
{

}
void Dialog::on_BtnCancel_clicked()
{

}

Pour la fonction principale ,Lorsque l'utilisateur cliqueon_pushButton_clicked()Quand le bouton, Nous devons nous créer dynamiquement DialogChargement, Lisez les valeurs dans la zone d'édition du formulaire principal et définissez - les dans le Sous - formulaire ,Quand l'utilisateur appuie surQDialog::Accepted Obtient la valeur dans le Sous - formulaire , Et le placer dans la zone d'édition du formulaire parent , Le Code de la fonction principale est le suivant .

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

#include "dialog.h"
#include <iostream>
#include <QDialog>

MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->lineEdit->setEnabled(false);
    ui->lineEdit->setText("hello lyshark");
}

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

// By: LyShark
// https://www.cnblogs.com/lyshark
//  Cliquez sur le bouton et exécutez 
void MainWindow::on_pushButton_clicked()
{
    //  Créer une boîte de dialogue modale 
    Dialog *ptr = new Dialog(this);                                 // Créer une boîte de dialogue
    Qt::WindowFlags flags = ptr->windowFlags();                     //  Valeur de retour requise 
    ptr->setWindowFlags(flags | Qt::MSWindowsFixedSizeDialogHint);  //  Définir la taille fixe de la boîte de dialogue 

    // LireMainWindows Paramètres et réglage à Dialog
    QString item = ui->lineEdit->text();
    ptr->SetValue(item);

    int ref = ptr->exec();             //  Afficher la boîte de dialogue en mode 
    if (ref==QDialog::Accepted)        // OKLa clé est pressée,La boîte de dialogue se ferme
    {
        // QuandBtnOk Quand on l'appuie , Définir les données dans la boîte de dialogue 
        QString the_value = ptr->GetValue();
        std::cout << "value = " << the_value.toStdString().data() << std::endl;
        ui->lineEdit->setText(the_value);
    }

    //  Supprimer la poignée de la boîte de dialogue de libération 
    delete ptr;
}

Les codes de démonstration spécifiques sont les suivants :


Et pour Plaque signalétique Dis,Nous avons besoin dedialog.h Ajout de sendText()Signal,Eton_pushButton_clicked() Déclaration de la fonction slot .

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

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

// By: LyShark
// https://www.cnblogs.com/lyshark
private:
    Ui::Dialog *ui;


// Définir le signal( Le signal doit simplement déclarer qu'il n'a pas besoin d'être mis en oeuvre )
signals:
    void sendText(QString str);

private slots:
    void on_pushButton_clicked();
};

#endif // DIALOG_H

dialog.cpp Pour établir une connexion dans le constructeur , Et en fournir un envoyé à MainWindowBoutons dans.

#include "dialog.h"
#include "ui_dialog.h"

// By: LyShark
// https://www.cnblogs.com/lyshark
Dialog::Dialog(QWidget *parent) :QDialog(parent),ui(new Ui::Dialog)
{
    ui->setupUi(this);
    connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(onBtnClick()));
}

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

//  Envoyer un signal à MainWindow
void Dialog::on_pushButton_clicked()
{
    QString send_data = ui->lineEdit->text();
    emit sendText(send_data);
}

Fichier d'en - tête du formulaire principal mainwindow.hDéfinition moyennereceiveMsg Fonction de fente qui accepte les données .

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

// By: LyShark
// https://www.cnblogs.com/lyshark
private slots:
    // Définir la fonction slot
    void receiveMsg(QString str);
    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

Et dansmainwindow.cpp Implémenter cette fonction de fente dans .

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

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

// By: LyShark
// https://www.cnblogs.com/lyshark
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->lineEdit->setEnabled(false);
}

//  Recevoir le signal et le régler à LineEditAllez.
void MainWindow::receiveMsg(QString str)
{
    ui->lineEdit->setText(str);
}

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

void MainWindow::on_pushButton_clicked()
{
    Dialog *subwindow = new Dialog(this);
    // Dès réceptionsendText Utilisé pour le signal receiveMsg Traitement de la fonction slot 
    connect(subwindow, SIGNAL(sendText(QString)), this, SLOT(receiveMsg(QString)));
    subwindow->show();
}

Après l'exécution du Code, il est essentiellement compatible avec la version fonctionnelle , Mais la plaque signalétique est un peu plus flexible .

版权声明
本文为[Lyshark]所创,转载请带上原文链接,感谢
https://cdmana.com/2021/11/20211125170202909t.html

Scroll to Top