Qt --- 自定义提示框 类似QMessagebox

这篇具有很好参考价值的文章主要介绍了Qt --- 自定义提示框 类似QMessagebox。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

QMessageBox::information(NULL, QString("title"), QString("I am information"));

Qt --- 自定义提示框 类似QMessagebox,Qt 界面设置,qt,开发语言

以下是自定义提示框的代码,有图有真相!提示框大部分都采用模态的形式,关于模态也不再多提!所以父类为QDialog,通过exec()返回值QDialog::Accepted或QDialog::Rejected来进行判断执行相应的事件。

#include "msg_box.h" 

MsgBox::MsgBox(QWidget *parent)
 : QDialog(parent)
{
  this->resize(320, 160);

  //获取主界面的宽度
  int width = this->width();
  int height = this->height();

  //初始化为未按下鼠标左键
  mouse_press = false;

  //设置标题栏隐藏
  this->setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog);
 
  close_button = new PushButton(this);
  close_button->loadPixmap("tipclose");
  close_button->setGeometry(width-30, 0, 30, 30); 
 
  //设置标题
  title_label = new QLabel(this);
 title_label->setObjectName(QString::fromUtf8("labelOne"));
  QFont font = title_label->font();
  font.setBold(true);
  title_label->setFont(font);
  title_label->setGeometry(0, 0, width-50, 30);

  //设置提示图片
  msg_label = new QLabel(this);
  msg_label->setGeometry(20, 50, 36, 36);
  msg_label->setScaledContents(true);

  //设置提示信息,让QLabel能够自动判断并换行显示:
  ask_label = new QLabel(this);
  ask_label->setGeometry(65, 60, width-100, 25*2);
  ask_label->setWordWrap(true);
  ask_label->setAlignment(Qt::AlignTop);
 
  check_box = new QCheckBox(this);
  check_box->setGeometry(10, height - 35, 160, 25);
  check_box->setHidden(true);

  cancel_button = new QPushButton(this);
  cancel_button->resize(70, 25);
  cancel_button->move(width - cancel_button->width() - 10, height - 35);

  ok_button = new QPushButton(this);
  ok_button->resize(70, 25);
  ok_button->move(width - ok_button->width() - cancel_button->width() - 20, height - 35);

 check_box->setStyleSheet("background:transparent;");

 ok_button->setObjectName(QString::fromUtf8("pushButtonTwo"));
 cancel_button->setObjectName(QString::fromUtf8("pushButtonTwo"));
 
  QObject::connect(ok_button, SIGNAL(clicked()), this, SLOT(okOperate()));
  QObject::connect(close_button, SIGNAL(clicked()), this, SLOT(cancelOperate()));
  QObject::connect(cancel_button, SIGNAL(clicked()), this, SLOT(cancelOperate()));

  this->translateLanguage();
}

void MsgBox::translateLanguage()
{
  close_button->setToolTip(tr("close"));
  check_box->setText(tr("remember"));
  ok_text = tr("ok");
  cancel_text = tr("cancel");
}

void MsgBox::setInfo(QString title_info, QString info, QPixmap pixmap, bool is_check_hidden, bool is_ok_hidden)
{
 title_label->setText(QString("  ") + title_info);

  //设置提示信息
  ask_label->setText(info);
  msg_label->setPixmap(pixmap);

  //是否隐藏复选框
  check_box->setChecked(false);
  check_box->setHidden(is_check_hidden);

  //是否隐藏确定按钮
  ok_button->setHidden(is_ok_hidden);
  if(is_ok_hidden)
  {
   cancel_button->setText(ok_text);
  }
  else
  {
   ok_button->setText(ok_text);
   cancel_button->setText(cancel_text);
  }

  //设置默认按钮为取消按钮
  cancel_button->setFocus();
}

void MsgBox::paintEvent(QPaintEvent *)
{
  QPainter painter(this);
  painter.drawPixmap(rect(), QPixmap(":/icon/tip"));

  QBitmap bitmap(this->size());
  QPainter painter2(&bitmap);
  painter2.fillRect(bitmap.rect(), Qt::white);
  painter2.setBrush(QColor(0, 0, 0));
  painter2.drawRoundedRect(rect(), 4, 4);
  setMask(bitmap);
}

void MsgBox::mousePressEvent( QMouseEvent * event )
{
  //只能是鼠标左键移动和改变大小
  if(event->button() == Qt::LeftButton)
  {
    mouse_press = true;
  }

  //窗口移动距离
  move_point = event->globalPos() - pos();
}

void MsgBox::mouseReleaseEvent( QMouseEvent *)
{
  mouse_press = false;
}

void MsgBox::mouseMoveEvent(QMouseEvent *event)
{
  //移动窗口
 if(mouse_press)  
  {
    QPoint move_pos = event->globalPos();
   move(move_pos - move_point);
  }
}

void MsgBox::okOperate()
{
  bool is_hidden = check_box->isHidden();
  if(!is_hidden)
  {
    bool is_checked = check_box->isChecked();
    emit msgChecked(is_checked, true);
  }
  this->accept();
}

void MsgBox::cancelOperate()
{
  bool is_check_hidden = check_box->isHidden();
  bool is_ok_hidden = ok_button->isHidden();
  if(!is_check_hidden)
  {
    bool is_checked = check_box->isChecked();
   if(!is_ok_hidden)
    {
      emit msgChecked(is_checked, false);
    }
   else
   {
    emit okMessageHidden(is_checked);
   } 
  }

  this->reject();
}

 效果图:

MsgBox *msg_box = new MsgBox();
 msg_box->setInfo(QString("文件删除"), QString("确实要把文件放入回收站吗?"), QPixmap(":/icon/attention"), true, false);
 msg_box->exec();

Qt --- 自定义提示框 类似QMessagebox,Qt 界面设置,qt,开发语言

MsgBox *msg_box2 = new MsgBox();
 msg_box2->setInfo(QString("重命名"), QString("文件名不能包含下列任何字符:\n    \\ / : * ? \" < > |"), QPixmap(":/icon/attention"), true, true);
 msg_box2->exec();

 Qt --- 自定义提示框 类似QMessagebox,Qt 界面设置,qt,开发语言

MsgBox *msg_box3 = new MsgBox();
 msg_box3->setInfo(QString("批量文件删除"), QString("确实要把所有文件放入回收站吗?"), QPixmap(":/icon/attention"), false, false);
 msg_box3->exec();

 Qt --- 自定义提示框 类似QMessagebox,Qt 界面设置,qt,开发语言文章来源地址https://www.toymoban.com/news/detail-684272.html

到了这里,关于Qt --- 自定义提示框 类似QMessagebox的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • qt之实现QMessageBox定时关闭效果

    效果如下: 其实很简单,代码如下:

    2024年02月16日
    浏览(24)
  • 【QT】QMessageBox消息框的使用(16)

    在实际项目中,弹出消息框是一个很常见的操作,包含 错误信息提示、警告信息提示、关于信息提示、还包括判断信息选择 等操作,那么今天通过这一节来好好了解下消息框的使用方法。 1.python 3.7.8   可直接进入官网下载安装:Download Python | Python.org 2.QT Designer  官方下载

    2024年02月09日
    浏览(25)
  • 【Qt学习】05:自定义封装界面类

    1.QListWidget 2.QTreeWidget 3.QTableWidget 4.StackedWidget 5.Others 6.自定义封装界面类-显示效果 创建自定义封装界面类步骤一般如下, (1)添加设计师界面类 添加新文件,Qt-设计师界面类, 根据需要选择界面模板即可,这里选择Widget作为界面模板进行创建, 根据语义为自定义的界面类

    2024年02月11日
    浏览(20)
  • 基于QT的参数设置界面

    在一些工业开发的软件中,需要对一些硬件或者算法进行参数的设置,但是QT官方给出的QtTreeProperty控件,在一些程度上,不足以满足我们的需求,比如说,单独的按钮,以及一些选择文件夹和文件路径等。在次基础上,利用QT5.14.2的QTableView控件来制作一款参数设置控件。界面

    2024年02月04日
    浏览(26)
  • Qt/C++自定义界面大全/20套精美皮肤/26套精美UI界面/一键换肤/自定义颜色/各种导航界面

    这个系列对应自定义控件大全,一个专注于控件的编写,一个专注于UI界面的编写,程序员有两大软肋,一个是忌讳别人说自己的程序很烂很多bug,一个就是不擅长UI,基本上配色就直接rgb,对于第一点,只要放松心态,直面自己的不足,不断改进,才能问鼎武林至尊。至于第

    2024年01月20日
    浏览(27)
  • Qt 自定义提示框 右下角冒泡

    网页右下角上经常会出现一些提示性的信息,B/S有的东西,C/S当然也可以有,就像QQ的消息提示一样! 实现一个类似的东西并不困难,只要想明白原理实现起来就很简单了! 实现原理: (1)显示:右下角缓慢弹出,定时器启动,逐渐改变位置即可,到达相应位置,停止计时

    2024年02月11日
    浏览(30)
  • QT 的桌面应用界面有风格设置

    Qt 的桌面应用界面提供了风格设置的功能。Qt 支持多种风格,可以根据用户的喜好或应用程序的需求来选择适合的风格。 Qt 的风格设置可以通过 QApplication 类的 setStyle() 函数来实现。您可以选择以下几个常用的风格: QWindowsStyle:Windows 风格 QMacStyle:Mac 风格 QFusionStyle:融合风

    2024年02月02日
    浏览(29)
  • Qt之高仿QQ系统设置界面

    QQ或360安全卫士的设置界面都是非常有特点的,所有的配置项都在一个垂直的ScrollArea中,但是又能通过左侧的导航栏点击定位。这样做的好处是既方便查看指定配置项,又方便查看所有配置项。 下面左边是当前最新版QQ的系统设置界面,右边是我的高仿版本,几乎一毛一样

    2024年02月02日
    浏览(30)
  • Qt之界面 自定义标题栏、无边框、可移动、缩放

    注意:由于需要调用 Windows 上的头文件与库,所以不能跨平台,只支持 Windows 系统。如果想要跨平台,可以使用鼠标等事件实现,具体百度搜索参考下 titleBar.h titleBar.cpp widget.h widget.cpp mousePressEvent 之前,我们将界面移动的事件写在主界面里面,这会有一个问题,一般情况下,

    2024年02月05日
    浏览(24)
  • 【QT入门】 自定义标题栏界面qss美化+按钮功能实现

    往期回顾: 【QT入门】 鼠标按下和移动事件实现无边框窗口拖动-CSDN博客 【QT入门】 设计实现无边框窗口拉伸的公用类-CSDN博客 【QT入门】对无边框窗口自定义标题栏并实现拖动和拉伸效果-CSDN博客 1、实现悬浮样式改变 当鼠标悬浮到该按钮上时,样式会有一定改变。 2、添加

    2024年04月10日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包