wordpress建站 域名,网页设计制作报告,网站正在建设中 色,做营销型网站的教程3.2 自定义对话框及其调用3.3 Splash与登录窗口 3.2 自定义对话框及其调用
在一个应用程序设计中#xff0c;为了实现一些特定的功能#xff0c;必 须设计自定义对话框。自定义对话框的设计一般从 QDialog继承#xff0c;并且可以采用UI设计器可视化地设计对 话框。对话框的… 3.2 自定义对话框及其调用3.3 Splash与登录窗口 3.2 自定义对话框及其调用
在一个应用程序设计中为了实现一些特定的功能必 须设计自定义对话框。自定义对话框的设计一般从 QDialog继承并且可以采用UI设计器可视化地设计对 话框。对话框的调用一般包括创建对话框、传递数据给 对话框、显示对话框获取输入、判断对话框单击按钮的 返回类型、获取对话框输入数据等过程。
实例 #ifndef MODIFYDIALOG_H
#define MODIFYDIALOG_H#include QDialognamespace Ui {
class ModifyDialog;
}class ModifyDialog : public QDialog
{Q_OBJECTpublic:// 构造函数参数为父窗口指针默认为空指针explicit ModifyDialog(QWidget *parent nullptr);// 析构函数~ModifyDialog();// 设置姓名和年龄的函数接受姓名和年龄作为参数void set_name_age(const QString name, int age);// 获取姓名的函数返回姓名字符串QString get_name();// 获取年龄的函数返回整数年龄int get_age();private:Ui::ModifyDialog *ui; // UI 指针};#endif // MODIFYDIALOG_H
#include modifydialog.h
#include ui_modifydialog.h// 构造函数实现接受父窗口指针默认为空指针
ModifyDialog::ModifyDialog(QWidget *parent) :QDialog(parent),ui(new Ui::ModifyDialog)
{ui-setupUi(this); // 初始化 UI
}// 析构函数实现
ModifyDialog::~ModifyDialog()
{delete ui; // 释放 UI 指针的内存
}// 设置姓名和年龄的函数实现接受姓名和年龄作为参数
void ModifyDialog::set_name_age(const QString name, int age)
{ui-sb_age-setValue(age); // 设置年龄的SpinBox的值ui-le_name-setText(name); // 设置姓名的LineEdit的文本
}// 获取姓名的函数实现返回姓名字符串
QString ModifyDialog::get_name()
{return ui-le_name-text(); // 获取姓名的LineEdit的文本
}// 获取年龄的函数实现返回整数年龄
int ModifyDialog::get_age()
{return ui-sb_age-value(); // 获取年龄的SpinBox的值
}
#include mainwindow.h
#include ui_mainwindow.h
#include modifydialog.hMainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui-setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{// 创建 ModifyDialog 对象传入父窗口指针ModifyDialog *md new ModifyDialog(this);// 对话框关闭时自动删除对话框对象用于不需要读取返回值的对话框// 如果需要获取对话框的返回值不能设置该属性可以在调用完对话框后手动删除对话框// md-setAttribute(Qt::WA_DeleteOnClose);// 获取对话框的窗口标志Qt::WindowFlags flags md-windowFlags();// 设置对话框固定大小md-setWindowFlags(flags | Qt::MSWindowsFixedSizeDialogHint);// 将主对话框中的信息传入到自定义对话框中md-set_name_age(ui-le_name-text(), ui-le_age-text().toInt());// 执行对话框获取返回值int ret md-exec();// 如果对话框被接受OK按钮被点击if (ret QDialog::Accepted) {// 将对话框中获取的值更新到主窗口的LineEdit中ui-le_age-setText(QString::asprintf(%d, md-get_age()));ui-le_name-setText(md-get_name());}// 手动删除对话框delete md;
}
小结
如果主程序中需要自定义窗口的信息那就不要调用 setAttribute(Qt::WA_DeleteOnClose)设定自定义窗口 结束后自动销毁。当使用完毕后可以通过delete的方式 自定义窗口在运行期间想获取更多主窗口中的信息可 以通过parentWidget()函数获取到主窗口句柄。
3.3 Splash与登录窗口
常用的窗体基类是QWidget、 QDialog和QMainWindow在创建GUI应用程序时选择 窗体基类就从这3个类中选择。 一般大型应用程序在启动时会显示一个启动画面即 Splash窗口。Splash窗口是一个无边框的对话框一般 显示一个图片展示软件的信息。Splash窗口显示时 程序在后台做一些比较耗时的启动准备工作Splash窗 口显示一段时间后自动关闭软后软件的主窗口显示出 来。Qt有一个QSplashScreen类可以实现Splash窗口的 工作它提供而来载入图片自动设置窗口无边框效果 等功能。有的应用程序还有软件登录界面要求用户输 入用户名和密码才可以进入软件。 #include logindialog.h
#include ui_logindialog.hLoginDialog::LoginDialog(QWidget *parent) :QDialog(parent),ui(new Ui::LoginDialog)
{ui-setupUi(this);// 设置对话框关闭时自动删除对象setAttribute(Qt::WA_DeleteOnClose);// 设置对话框的窗口标志为 SplashScreen 实现无边框效果setWindowFlags(Qt::SplashScreen);
}LoginDialog::~LoginDialog()
{delete ui;
}void LoginDialog::on_buttonBox_accepted()
{// 检查用户名和密码是否符合预期if (ui-le_name-text().trimmed() 李钢蛋儿 ui-le_passwd-text().trimmed() 123456) {// 符合预期则接受对话框return accept();} else {// 不符合预期则拒绝对话框return reject();}
}
#include mainwindow.h // 包含头文件mainwindow.h
#include QApplication // 包含头文件QApplication
#include logindialog.h // 包含头文件logindialog.hint main(int argc, char *argv[]) // 定义main函数
{QApplication a(argc, argv); // 创建一个QApplication对象aLoginDialog *dlgLogin new LoginDialog; // 创建一个LoginDialog对象dlgLoginif(dlgLogin-exec() QDialog::Accepted) // 如果用户单击了“确定”按钮{MainWindow w; // 创建一个MainWindow对象ww.show(); // 显示MainWindow对象return a.exec(); // 进入主事件循环等待应用程序退出}else // 如果用户单击了“取消”按钮或关闭了登录对话框{return 0; // 返回0退出应用程序}
}