Creating Dialogs

Posted 嘘睡觉呢

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Creating Dialogs相关的知识,希望对你有一定的参考价值。

 1 #ifndef DIALOG_H
 2 #define DIALOG_H
 3 
 4 #include <QtWidgets>
 5 //#include <QDialog>
 6 //#include <QLabel>
 7 //#include <QCheckBox>
 8 //#include <QLineEdit>
 9 //#include <QPushButton>
10 //#include <QtCore>
11 namespace Ui {
12 class Dialog;
13 }
14 
15 class Dialog : public QDialog
16 {
17     Q_OBJECT
18 
19 public:
20     explicit Dialog(QWidget *parent = 0);
21     ~Dialog();
22 
23 signals:
24     void FindNext(const QString &str, Qt::CaseSensitivity cs);
25     void FindPre (const QString &str, Qt::CaseSensitivity cs);
26 
27 private slots:
28     void FindClicked();
29     void EnabledFindButton(const QString &text);
30 
31 private:
32     Ui::Dialog *ui;
33     QLabel *label;
34     QLineEdit *lineEdit;
35     QCheckBox *caseCheckBox;
36     QCheckBox *backwardCheckBox;
37     QPushButton *findButton;
38     QPushButton *closeButton;
39 };
40 
41 #endif // DIALOG_H
dialog.h
#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    label = new QLabel(tr("Find &what:"));
    lineEdit = new QLineEdit;
    label->setBuddy(lineEdit);

    caseCheckBox = new QCheckBox(tr("Match &case"));
    backwardCheckBox = new QCheckBox(tr("search &backward"));

    findButton = new QPushButton(tr("&Find"));
    findButton->setDefault(true);
    findButton->setEnabled(false);

    closeButton = new QPushButton(tr("Close"));

    connect(lineEdit,SIGNAL(textChanged(const QString &)),this,SLOT(EnabledFindButton(const QString &)));
    connect(findButton,SIGNAL(clicked()),this,SLOT(FindClicked()));
    connect(closeButton,SIGNAL(clicked()),this,SLOT(close()));

    QHBoxLayout *topLeftLayout = new QHBoxLayout;
    topLeftLayout->addWidget(label);
    topLeftLayout->addWidget(lineEdit);

    QVBoxLayout *leftLayout = new QVBoxLayout;
    leftLayout->addLayout(topLeftLayout);
    leftLayout->addWidget(caseCheckBox);
    leftLayout->addWidget(backwardCheckBox);

    QVBoxLayout *rightLayout = new QVBoxLayout;
    rightLayout->addWidget(findButton);
    rightLayout->addWidget(closeButton);
    rightLayout->addStretch();

    QHBoxLayout *mainLayout = new QHBoxLayout;
    mainLayout->addLayout(leftLayout);
    mainLayout->addLayout(rightLayout);
    setLayout(mainLayout);

    setWindowTitle(tr("Find"));
    setFixedHeight(sizeHint().height());
}
void Dialog::FindClicked()
{
    QString text = lineEdit->text();
    Qt::CaseSensitivity cs = caseCheckBox->isChecked() ? Qt::CaseSensitive : Qt::CaseInsensitive;
    if(backwardCheckBox->isChecked())
    {
        emit FindPre(text,cs);
    }
    else
        emit FindNext(text,cs);

}

void Dialog::EnabledFindButton(const QString &text)
{
    findButton->setEnabled(!text.isEmpty());
}

Dialog::~Dialog()
{
    delete ui;
}
dialog.cpp
#include "dialog.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog w;
    w.show();

    return a.exec();
}
main.cpp

1、对于定义了信号(signals)或槽(slots)的类,宏定义Q_OBJECT是必须的

2、tr(),翻译可显字符

3、‘&’表示快捷键

4、setDefault(true) 设置default按钮(按回车即为按下该按钮)

5、setEnabled(false) 设置按钮无效,按钮显示为灰色

6、setWindowTitle(tr("Find"));

     setFixedHeight(sizeHint().height()); //程序自己设置一个合适的高度

7、connect(sender,SIGNAL(signal),receiver,SLOT(slot));

QLabel *label = new QLabel;
QScrollBar *scrollBar = new QScrollBar;
QObject::connect(scrollBar, SIGNAL(valueChanged(int)),
                 label,  SLOT(setNum(int)));

  This example ensures that the label always displays the current scroll bar value. Note that the signal and slots parameters must not   contain any variable names, only the type. E.g. the following would not work and return false:

// WRONG
QObject::connect(scrollBar, SIGNAL(valueChanged(int value)),
                 label, SLOT(setNum(int value)));

  a signal can be connected to another signal

connect(lineEdit, SIGNAL(textChanged(const QString &)), this, SIGNAL(updateRecord(const QString &)));

  when the first signal is emitted, the second signal is emitted as well. 

  To successfully connect a signal to a slot (or to another signal), they must have the same parameter types in the same order:

connect(ftp, SIGNAL(rawCommandReply(int, const QString &)), this , SLOT(processReply(int, const QString &)));

 

以上是关于Creating Dialogs的主要内容,如果未能解决你的问题,请参考以下文章

持久片段和查看器

<2021SC@SDUSC>开源游戏引擎Overload代码分析三(OvWindowing结束):OvWindowing——Dialogs

如何使用cordova-plugin-dialogs?

使用 MVVM 在 wpf 中使用 Dialogs 的好做法还是坏做法?

JavaScript Creating 对象

未安装错误模块“QtQuick.Dialogs”