使用java和qt开发远程控制系统-主界面设计
生活随笔
收集整理的這篇文章主要介紹了
使用java和qt开发远程控制系统-主界面设计
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首界面效果如圖
界面就比較簡單,拖拉幾個控件,設置一下樣式ok,不得不說QT這個QSS弄的還是可以,雖然明顯是抄襲CSS,語法基本一樣,但就是香,比微軟那MFC好用太多了。
整個界面還增加了一個標題欄,以及窗體圓角邊框和陰影效果,具體是實現方式為,定義了一個MDialog類,繼承自QDialog,在MDialog里面,實現了圓角邊框,陰影效果,使用繪圖方式實現的。
新建一個Dialog,只要繼承一下MDialog,就可以輕松實現。需要注意的是,ui文件里面也需要修改一下繼承類,但是在QTCreater里面無法修改,因此需要用記事本打開ui文件,手動修改繼承自MDiaolog類
?圖的意思就是ui文件需要修改基類
MDialog.h源碼
#include <QDialog> #include "qlabel.h" #include "qpushbutton.h" #include "QPoint" #include <QMouseEvent>class MDialog : public QDialog {Q_OBJECTpublic:explicit MDialog(QWidget *parent = 0);~MDialog();void show(); protected:virtual void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;//virtual void keyPressEvent(QKeyEvent *ev);void mouseMoveEvent(QMouseEvent* event);//鼠標移動事件void mousePressEvent(QMouseEvent* event);//鼠標按下事件void mouseReleaseEvent(QMouseEvent* event);//鼠標釋放事件QPushButton *closeBtn; private:QWidget * top;QLabel * title;QLabel *ico;//用來顯示圖標bool isPressed;QPoint old;//原始的點int x_nBorder;//邊框QColor x_bgColor;//背景色int x_nRatio;//圓角率void drawBG(QPainter* painter);void drawShadow(QPainter* painter); public slots:void doClose();void doMin();void doMenu(); public:void hideTitle();void hideMenu();void setTitle(QString title);//設置標題void hideMin();//隱藏最小化void hideClose();//隱藏關閉按鈕void hideIcon();//隱藏圖標};#endif // MFORM_HMDialog.cpp源碼
#include "mdialog.h"#include "qpainter.h" #include "QDebug" #include <qmath.h> #include <QApplication> MDialog::MDialog(QWidget *parent) :QDialog(parent) {//ui->setupUi(this);this->setAttribute(Qt::WA_TranslucentBackground);setWindowFlags(Qt::FramelessWindowHint| Qt::WindowStaysOnTopHint);x_nBorder = 5;x_bgColor = Qt::white;x_nRatio = 5;top=new QWidget(this);top->setStyleSheet("background:#333");top->resize(this->width()-10,40);top->move(x_nBorder,x_nBorder);title=new QLabel(top);title->setText("曲大家遠程控制軟件");title->setStyleSheet("color:#fff;");QFont ft("黑體",12,1);title->setFont(ft);title->move(40,10);closeBtn=new QPushButton(top);closeBtn->setStyleSheet("QPushButton{border:none;background:#f00 url(:/images/close.png) center no-repeat;}QPushButton::hover{background:#900 url(:/images/close.png) center no-repeat;}");closeBtn->resize(25,25);closeBtn->move(top->width()-32,10);QPixmap map(":/images/tlogo.png");map=map.scaled(24,24);ico=new QLabel(top);ico->setPixmap(map);ico->move(5,5);connect(closeBtn, SIGNAL(clicked()), this, SLOT(doClose()));//連接關閉事件this->setTitle("曲大家遠程控制軟件"); }MDialog::~MDialog() {} void MDialog::show(){setWindowState(Qt::WindowNoState);QDialog::show();}void MDialog::paintEvent(QPaintEvent *event) {if(this->top!=NULL){//重置標題大小QRect rect = this->rect();top->resize(rect.width()-x_nBorder*2,38);closeBtn->move(top->width()-30,6);}QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);drawBG(&painter);drawShadow(&painter);QWidget::paintEvent(event);} void MDialog::drawBG(QPainter* painter) {painter->save();QBrush brush(x_bgColor);painter->setBrush(brush);painter->setPen(Qt::NoPen);QRect _rect = this->rect();QRect _rectBG = QRect(_rect.x() + x_nBorder, _rect.y() + x_nBorder, _rect.width() - 2 * x_nBorder, _rect.height() - 2 * x_nBorder);painter->drawRoundedRect(_rectBG, x_nRatio, x_nRatio);painter->restore(); }void MDialog::drawShadow(QPainter* painter) {painter->save();QColor color(0, 0, 0, 0);for (int i = 0; i < x_nBorder; ++i){QPainterPath path;path.setFillRule(Qt::WindingFill);path.addRoundedRect(x_nBorder - i, x_nBorder - i, this->width() - (x_nBorder - i) * 2, this->height() - (x_nBorder - i) * 2, x_nRatio, x_nRatio);color.setAlpha(100 - qSqrt(i) * 50);painter->setPen(color);painter->drawPath(path);}painter->restore(); } void MDialog::hideTitle(){top->hide(); } void MDialog::hideMin(){//minBtn->hide(); } void MDialog::hideIcon(){ico->hide();title->move(10,10); } void MDialog::hideMenu(){// menuBtn->close(); } void MDialog::hideClose(){closeBtn->hide(); } void MDialog::setTitle(QString title) {// echo("title="+title);this->setWindowTitle(title);this->title->setText(title); } void MDialog::doClose(){QApplication::exit(); } void MDialog::doMenu(){} void MDialog::doMin(){setWindowState(Qt::WindowMinimized); } void MDialog::mousePressEvent(QMouseEvent* event) {if(event->button() == Qt::LeftButton && event->y()<=40){isPressed = true;old = event->globalPos();} }void MDialog::mouseMoveEvent(QMouseEvent* event) {if(isPressed && event->buttons().testFlag(Qt::LeftButton)){this->move(this->pos() + (event->globalPos() - old));old = event->globalPos();} }void MDialog::mouseReleaseEvent(QMouseEvent* event) {if(event->button() == Qt::LeftButton){isPressed = false;} }總結
以上是生活随笔為你收集整理的使用java和qt开发远程控制系统-主界面设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全球化同步时代,电子名片六大功能助你销售
- 下一篇: Simhash算法详解及python实现