Qt对话框

目录

对话框20201023

1.文件对话框

2.颜色对话框

3.字体对话框

4.输入对话框

5.消息对话框

6.自定义消息对话框


对话框20201023

新建:Qt Widgets Application

项目名称:DialogExample

类名:Dialog

基类:QDialog

选择“创建界面”

成果先展示:

1.文件对话框

//【1】标准文件对话框
    fileBtn = new QPushButton;          //创建QPushButton类新对象,初始化新控件对象
    fileBtn->setText(tr("1 文件对话框"));
    filelineEdit = new QLineEdit;       //创建QLineEdit类新对象
    mainLayout = new QGridLayout(this); //网格布局,带this:表示
    mainLayout->addWidget(fileBtn,0,0);
    mainLayout->addWidget(filelineEdit,0,1);

//事件关联
    connect(fileBtn,SIGNAL(clicked()),this,SLOT(showFile()));       //【1】获取文件名

//【1】显示文件
void Dialog::showFile()
{
    QString s = QFileDialog::getOpenFileName(this,"打开文件对话框","/","C++ files(*.cpp);;C files(*.c);;Head files(*.h)");
    //静态函数getOpenFileName(父窗口,标题名,默认目录,文件类型过滤(过滤器之间用;;隔开))——获取所选文件的文件名并显示
    filelineEdit->setText(s);
}

2.颜色对话框

//【2】标准颜色对话框
    colorBtn = new QPushButton;
    colorBtn->setText(tr("2 颜色对话框"));
    colorFrame = new QFrame;
    colorFrame->setFrameShape(QFrame::Box);
    colorFrame->setAutoFillBackground(true);//背景
    mainLayout->addWidget(colorBtn,1,0);
    mainLayout->addWidget(colorFrame,1,1);

//事件关联
    connect(colorBtn,SIGNAL(clicked()),this,SLOT(showColor()));     //【2】获取颜色

//【2】显示颜色
void Dialog::showColor()
{
    QColor c = QColorDialog::getColor(Qt::blue);
    //静态函数getColor()获取所选颜色,默认为白色。

    if(c.isValid())
        colorFrame->setPalette(QPalette(c));    //如果选择颜色有效,则设置所选颜色setPalette()
}

3.字体对话框

//【3】标准字体对话框
    fontBtn = new QPushButton;
    fontBtn->setText(tr("3 字体对话框"));
    fontlineEdit = new QLineEdit;
    fontlineEdit->setText(tr("不同字体的显示"));
    mainLayout->addWidget(fontBtn,2,0);
    mainLayout->addWidget(fontlineEdit,2,1);


//事件关联
    connect(fontBtn,SIGNAL(clicked()),this,SLOT(showFont()));       //【3】获取字体

//【3】显示字体
void Dialog::showFont()
{
    bool ok;
    QFont f = QFontDialog::getFont(&ok);
    //静态函数getFont(带参数)获取所选字体

    if(ok)
        fontlineEdit->setFont(f);           //设置所选字体setFont()
}

4.输入对话框

//【4】标准输入对话框
    inputBtn = new QPushButton;
    inputBtn->setText(tr("4 输入对话框"));
    mainLayout->addWidget(inputBtn,3,0);  //布局设计

//事件关联
    connect(inputBtn,SIGNAL(clicked()),this,SLOT(showInputDlg()));  //【4】获取输入信息

//【4】显示输入对话框
void Dialog::showInputDlg()
{
    inputDlg = new InputDlg(this);  //用类定义对象,创建输入对话框  //带有this
    inputDlg->show();               //并列打开新对话框
}


新增类InputDlg有单独的源文件inputdlg.cpp和头文件inputdlg.h,代码另附。

小问题及解决办法:

 

Q: 为什么我照抄代码,点击4个按钮却没有任何反应呢?

A: inputdlg.h类定义里少写了一个Q_OBJECT

作用:Q_OBJECT是个宏,作用是启动Qt5元对象系统的一些特性(如支持信号和槽等)。它必须放在类定义的私有区中

5.消息对话框

新建C++类(*.pro右击添加类)

类名:MsgBoxDlg

基类:Custom

//事件关联 
    connect(MsgBtn,SIGNAL(clicked()),this,SLOT(showMsgDlg()));      //【5】获取消息

//【5】显示消息对话框
void Dialog::showMsgDlg()
{
    msgDlg = new MsgBoxDlg();      //用类定义对象,创建消息对话框并显示
    msgDlg->show();
}


新增类MsgBoxDlg有单独的源文件imsgboxdlg.cpp和头文件msgboxdlg.h,代码另附。

小问题及解决办法:

(1)出现以下expected class-name before '{' token { ^这种错误

出现的原因:QDialog 是灰色的,没有包含头文件  #include <QDialog>

(2)出现以下undefined reference to 'MsgBoxDlg::staticMetaObject'这种错误

分析原因msgboxdlg.h里加了Q_OBJECT,却发生了这样的错误,去掉Q_OBJECT,所报错误也就没有了。但最终,Q_OBJECT是必须得有的

建议解决办法:删除之前生成的编译文件夹,重新编译生成并运行软件。

6.自定义消息对话框

//事件关联
  connect(CustomBtn,SIGNAL(clicked()),this,SLOT(showCustomDlg()));//【6】自定义消息

//【6】显示自定义消息对话框
void Dialog::showCustomDlg()
{
    label->setText(tr("自定义消息框"));
    QMessageBox customMsgBox;
    customMsgBox.setWindowTitle(tr("用户自定义消息框"));
    QPushButton *yesBtn = customMsgBox.addButton(tr("Yes"),QMessageBox::ActionRole);
    QPushButton *noBtn = customMsgBox.addButton(tr("No"),QMessageBox::ActionRole);
    QPushButton *cancelBtn = customMsgBox.addButton(QMessageBox::Cancel);
    //addButton()函数:addButton(按钮显示文字,按钮类型),消息框按照调用addButton()函数的先后顺序由左至右的排布
    customMsgBox.setText(tr("这是用户自定义消息框(带图片)"));
    customMsgBox.setIconPixmap(QPixmap("Manage.bmp"));  //图标:放在编译路径build-XXX-Debugbuild-DialogExample-unknown-Debug文件夹下。
    customMsgBox.exec();//显示自定义消息框
    if(customMsgBox.clickedButton()==yesBtn)
        label->setText("自定义消息框/Yes");
    if(customMsgBox.clickedButton()==noBtn)
        label->setText("自定义消息框/No");
    if(customMsgBox.clickedButton()==cancelBtn)
        label->setText("自定义消息框/Cancel");
    return;
}

涉及函数:

addButton()函数:addButton(按钮显示文字,按钮类型),消息框按照调用addButton()函数的先后顺序由左至右的排布

以下是一个简单的 Qt 对话框应用实例,它创建了一个包含单行编辑框和两个按钮的对话框,一个用于确认操作,一个用于取消操作。在用户输入一些文本后,单击确认按钮将在控制台输出该文本。 ```cpp #include <QApplication> #include <QDialog> #include <QLineEdit> #include <QPushButton> #include <QVBoxLayout> #include <QDebug> int main(int argc, char *argv[]) { QApplication app(argc, argv); QDialog dialog; // 创建一个单行编辑框 QLineEdit *lineEdit = new QLineEdit(&dialog); // 创建一个确认按钮 QPushButton *okButton = new QPushButton("OK", &dialog); // 创建一个取消按钮 QPushButton *cancelButton = new QPushButton("Cancel", &dialog); // 创建一个垂直布局 QVBoxLayout *layout = new QVBoxLayout(&dialog); // 将单行编辑框添加到布局中 layout->addWidget(lineEdit); // 将确认按钮添加到布局中 layout->addWidget(okButton); // 将取消按钮添加到布局中 layout->addWidget(cancelButton); // 连接确认按钮的 clicked 信号到一个 lambda 表达式 QObject::connect(okButton, &QPushButton::clicked, [&]() { qDebug() << "Text entered: " << lineEdit->text(); dialog.accept(); // 关闭对话框 }); // 连接取消按钮的 clicked 信号到对话框的 reject() 槽函数 QObject::connect(cancelButton, &QPushButton::clicked, &dialog, &QDialog::reject); // 显示对话框 dialog.exec(); return app.exec(); } ``` 这个例子演示了如何创建一个简单的 Qt 对话框应用,并且展示了如何使用单行编辑框、按钮和布局等 Qt 控件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卢奕冰2017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值