qt(4) dialog1

本文介绍了一个基于Qt的主窗口设计实例,包括菜单栏、状态栏、工具栏等组件的使用,并详细展示了如何通过模态对话框实现文件打开功能。
#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();
}*/

### QT Framework Dialog Widget Usage and Examples In the context of Qt framework, `QDialog` serves as a base class for dialog windows. These dialogs can be modal or modeless, blocking other interactions within the application or allowing them to continue respectively[^1]. Customizing these dialogs involves setting properties directly on instances of `QDialog`, applying stylesheets for visual adjustments, and integrating additional widgets like buttons, labels, and line edits. For instance, creating a simple custom dialog with styled `QLineEdit` elements appears as follows: ```cpp #include <QApplication> #include <QDialog> #include <QVBoxLayout> #include <QLabel> #include <QLineEdit> int main(int argc, char *argv[]) { QApplication app(argc, argv); QDialog dialog; QVBoxLayout *layout = new QVBoxLayout(&dialog); QLabel *label = new QLabel("Enter text:", &dialog); QLineEdit *lineEdit = new QLineEdit(&dialog); lineEdit->setStyleSheet("color: brown"); // Applying stylesheet layout->addWidget(label); layout->addWidget(lineEdit); dialog.setLayout(layout); dialog.exec(); } ``` This code snippet demonstrates how to create a basic dialog window containing a label prompting user input alongside an editable field (`QLineEdit`) whose text color has been customized using CSS-like style sheets. Additionally, more complex configurations may involve reading settings from external files such as XML manifests used by tools like qdoc for documentation purposes but not directly related to runtime behavior modification[^2]. To further enhance functionality beyond appearance changes, developers often connect signals emitted by child widgets (e.g., button clicks) to slots defined either inside the same object or elsewhere in the program structure. This pattern facilitates event-driven programming common in GUI applications built upon frameworks similar to Qt.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值