qt(4) dialog1

#include "mainwindow.h"
//#include "ui_mainwindow.h"
//#include <QtGui>
//#include <QtWidgets>
#include <QAction>
#include <QMenuBar>
#include <QStatusBar>
#include <QToolBar>
#include <QDialog>
#include <QDebug>
/*MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}
*/
MainWindow::MainWindow(QWidget *parent)
    :QMainWindow(parent)
{
    setWindowTitle(tr("Main Window"));

    openAction = new QAction(QIcon(":/images/1"),tr("&Open"),this);
    openAction->setShortcut(QKeySequence::Open);
    openAction->setStatusTip(tr("Open an existing file"));
    connect(openAction,&QAction::triggered,this,&MainWindow::open);

    QMenu *file = menuBar()->addMenu(tr("&File"));
    file->addAction(openAction);

    QToolBar *toolBar = addToolBar(tr("&File"));
    toolBar->addAction(openAction);
}

MainWindow::~MainWindow()
{

}

/*模态对话框
 * void MainWindow::open()
{
    QDialog dialog;//非屏幕中心
    dialog.setWindowTitle(tr("Hello,dialog!"));
    dialog.exec();
}*/

void MainWindow::open()
{
   QDialog dialog(this);//屏幕中心
   dialog.setWindowTitle(tr("Hello,dialog!"));
   dialog.exec();
   if (dialog.exec() == QDialog::Accepted) {//QDialog::exec()是有返回值的,其返回值是QDialog::Accepted或者QDialog::Rejected
       qDebug() << "accepted";
       // do something
   } else {
       qDebug("rejected");
       // do something else
   }
}
/*使用信号槽机制获取数据
 * // in dialog:
void UserAgeDialog::accept()
{
    emit userAgeChanged(newAge); // newAge is an int
    QDialog::accept();
}

// in main window:
void MainWindow::showUserAgeDialog()
{
    UserAgeDialog *dialog = new UserAgeDialog(this);
    //因为有 this 指针,当主窗口关闭时,UserAgeDialog 也会被销毁,因此也没有内存泄露。
    //mainwindow这个主窗口不关闭的情况下,反复打开关闭对话框,理论上会造成程序奔溃,存在内存泄露问题,设置setAttribute()函数是一个好的习惯
    connect(dialog, &UserAgeDialog::userAgeChanged, this, &MainWindow::setUserAge);
    dialog->show();
}

// ...

void MainWindow::setUserAge(int age)
{
    userAge = age;
}*/

/*非模态对话框
 * void MainWindow::open()
{
    QDialog *dialog = new QDialog;
    //在栈上创建,函数show()运行完就消除,窗口无法保留,在堆上创建,解决这个问题
    dialog->setAttribute(Qt::WA_DeleteOnClose);//避免泻露内存
    //如果设置 dialog 的属性为WA_DeleteOnClose,那么当对话框关闭时,对象被销毁,就不能获取dialog.exec()数据了。
    dialog->setWindowTitle(tr("Hello,dialog!"));
    dialog->show();
}*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于在Qt中自定义对话框(Dialog),您可以按照以下步骤进行操作: 1. 创建一个新的类,继承自QDialog。例如,您可以创建一个名为CustomDialog的类。 ```cpp class CustomDialog : public QDialog { Q_OBJECT public: CustomDialog(QWidget *parent = nullptr); private: // 定义对话框中的控件和布局等私有成员 }; ``` 2. 在CustomDialog类的构造函数中添加对话框的控件和布局等。 ```cpp CustomDialog::CustomDialog(QWidget *parent) : QDialog(parent) { // 创建和添加对话框中的控件,例如标签、按钮、文本框等 QLabel *label = new QLabel("Hello, World!", this); QPushButton *button = new QPushButton("OK", this); // 创建布局管理器,并将控件添加到布局中 QVBoxLayout *layout = new QVBoxLayout(this); layout->addWidget(label); layout->addWidget(button); // 将布局设置为对话框的主布局 setLayout(layout); // 连接按钮的点击信号与槽函数 connect(button, &QPushButton::clicked, this, &QDialog::accept); } ``` 3. 在需要显示对话框的地方实例化CustomDialog类,并调用exec()函数来显示对话框。 ```cpp CustomDialog dialog; int result = dialog.exec(); if (result == QDialog::Accepted) { // 用户点击了对话框上的“OK”按钮 } else { // 用户关闭了对话框或点击了其他按钮 } ``` 以上是一个简单的示例,您可以根据需要在CustomDialog类中添加更多控件和自定义功能。希望对您有所帮助!如有任何问题,请随时向我提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值