我如何使用 QDialogbox 上的确定和取消按钮

Posted

技术标签:

【中文标题】我如何使用 QDialogbox 上的确定和取消按钮【英文标题】:How do i use okay and cancel buttons on QDialogbox 【发布时间】:2020-06-25 18:45:55 【问题描述】:

我有一个名为 "WinApp" 的 QDialog 框,它看起来像这样

所以,当我点击确定时,在两个 lineedits 中输入的值必须分配给两个 QStrings,我该如何实现呢?因为到目前为止,即使我单击“取消”,这些值仍然被分配给 QStrings。

但如果我单击取消,则输入的值不应分配给 QStrings。

如果需要,我的 WinApp.h 的代码是

#include <QtWidgets/qdialog.h>
#include "ui_WinApp.h"

class WinApp : public QDialog, public Ui::WinApp

    Q_OBJECT

public:
    WinApp(QWidget *parent = Q_NULLPTR);
    ~WinApp();
    
    QString getDialogueValue();

private slots:

private:
    Ui::WinApp ui;
;

我的 WinApp.cpp 的代码是

#include "WinApp.h"

WinApp::WinApp(QWidget *parent)
    : QDialog(parent)

    ui.setupUi(this);


WinApp::~WinApp()



QString WinApp::getDialogueValue()

    return ui.lineEdit->text();

更新:

这是 Mainwindow.cpp 的代码

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtCore>
#include <QtGui>
#include <sstream>
#include <QtWidgets/qmessagebox.h>
#include <QtWidgets/qlistwidget.h>

using namespace std;

MainWindow::MainWindow(QWidget* parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)

    ui->My_listwidget->addItem("New York");
    ui->My_listwidget->addItem("Glasgow");
    ui->My_listwidget->addItem("Mumbai");


MainWindow::~MainWindow()

    delete ui;


void MainWindow::on_My_listwidget_itemDoubleClicked(QListWidgetItem* item)

    QString test = item->text();
    std::string test_s = test.toStdString();

    if (test_s.find("New York") != std::string::npos) // check if item contains text "New York"
    
        WinApp winApp;
        winApp.setModal(true);   //Displaying the window here
        winApp.exec();
        
        QString testo =winApp.getDialogueValue(); // Getting the value from 1st line edit here from getter function and assignment is happening here. 

         item->setText(testo);    
         item->setData(CapitalRole, testo);
    
    
    if (test_s.find("Glasgow") != std::string::npos) 
    
    // show another dialog box asking some questions
    
    if (test_s.find("Mumbai") != std::string::npos) 
    
    // show another dialog box asking some questions
    

【问题讨论】:

缺少一些重要的代码,例如我们看不到getDialogueValue() 的调用位置和方式 哦,对不起,它是在主窗口的一个函数中调用的,我会更新我原来的问题 【参考方案1】:

关闭对话框后,您可以获得其结果(即用户单击的按钮的值)。像这样的:

WinApp dialog;
dialog.exec();
if (dialog.result() == QDialog::Accepted) 
    yourString = dialog.getDialogueValue();

来自 Qt 文档:https://doc.qt.io/qt-5/qdialog.html#result

通常返回模态对话框的结果代码,Accepted 或 Rejected。

【讨论】:

以上是关于我如何使用 QDialogbox 上的确定和取消按钮的主要内容,如果未能解决你的问题,请参考以下文章

Android 点击AlertDialog上的确定和取消按钮,使对话框不消失方法

选择器按钮的颜色在 android 5.1 上没有改变

请问在AlertDialog中如何再此嵌入AlertDialog

如何在访问相机时检查图像为零并在相机上按取消

如何更改选定和未选定 carbonSegmentedControl 项目的 alpha

Thinkpad如何取消BOIS开机密码?