当前位置: 移动技术网 > IT编程>开发语言>C/C++ > QT 自定义模态对话框

QT 自定义模态对话框

2018年10月11日  | 移动技术网IT编程  | 我要评论

诺基亚5830,我要穿越郭德纲,六爻测彩票

新建一个msgbox类

msgbox.h 代码

#ifndef msgbox_h
#define msgbox_h

#include <qdialog>
#include <qpushbutton>
#include <qlabel>
#include <qmouseevent>
#include <qfont>
#include <qpixmap>
#include <qpainter>
#include<qbitmap>

class msgbox : public qdialog
{
    q_object

public:
    msgbox(qwidget *parent = 0);
    ~msgbox();

public:
    qpushbutton *ok_button;
    qpushbutton *close_button;
    qpushbutton *cancel_button;
    qlabel *ask_label;
    qlabel *msg_label;
    qlabel *title_label;
    qstring ok_text;
    qstring cancel_text;

public:
    void setinfo(qstring title_info, qstring info,qpixmap pixmap, bool is_ok_hidden,qstring language);
protected:
    qpoint move_point;
    bool mouse_press;

    void paintevent(qpaintevent *);
    void mousepressevent( qmouseevent * event );
    void mousereleaseevent( qmouseevent *);
    void mousemoveevent(qmouseevent *event);
public slots:
    void okoperate();
    void canceloperate();
    void closeoperate();
};

#endif // msgbox_h

msgbox.cpp 代码

#include "msgbox.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 qpushbutton(this);

      //close_button->loadpixmap(":/image/images/bg.png");
      close_button->setgeometry(width-30,5, 20, 20);
      close_button->setstylesheet("border-image:url(:/image/images/closebtn.png);");

      //设置标题
      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-50, 25*2);
      ask_label->setwordwrap(true);
      ask_label->setalignment(qt::aligntop);

      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);


      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(closeoperate()));
      qobject::connect(cancel_button, signal(clicked()), this, slot(canceloperate()));
}

msgbox::~msgbox()
{

}

//设置对话框信息
void msgbox::setinfo(qstring title_info, qstring info,qpixmap pixmap,bool is_ok_hidden,qstring language)
{
  title_label->settext(qstring("  ") + title_info);

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

  //是否隐藏确定按钮
  ok_button->sethidden(is_ok_hidden);
  if(is_ok_hidden)
  {
      if(language == "中文")
      {
          cancel_button->settext(tr("确定"));
      }
      else if(language == "英文")
      {
          cancel_button->settext(tr("ok"));
      }
      else if(language == "泰文")
      {
          cancel_button->settext(tr("แน่ใจว่า"));
      }
  }
  else
  {
      if(language == "中文")
      {
          ok_button->settext(tr("确定"));
          cancel_button->settext(tr("取消"));
      }
      else if(language == "英文")
      {
          ok_button->settext(tr("ok"));
          cancel_button->settext(tr("cancel"));
      }
      else if(language == "泰文")
      {
          ok_button->settext(tr("แน่ใจว่า"));
          cancel_button->settext(tr("การยกเลิก"));
      }
  }

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

void msgbox::paintevent(qpaintevent *)
{
  qpainter painter(this);
  painter.drawpixmap(rect(), qpixmap(":/image/images/close.png"));

  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()
{
  this->accept();
}

//取消操作
void msgbox::canceloperate()
{
  this->reject();
}

//关闭窗体操作
void msgbox::closeoperate()
{
    close();
}

主函数调用代码:

#include "msgbox.h"
#include <qapplication>

int main(int argc, char *argv[])
{
    qapplication a(argc, argv);
    msgbox w;

    w.setinfo(qstring("提示:"),qstring("是否关机?"),qpixmap(":/image/images/tip.png"),false,qstring("中文"));
    w.show();
    return a.exec();
}

目录构建图:

实现效果图:

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网