国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

如何實現(xiàn)可拖動自定義控件

2023-04-07 12:45 作者:程序員-王堅  | 我要投稿

使用QT實現(xiàn)自定義類卡牌控件Card,使其能在父類窗口上使用鼠標進行拖動。

?

?

控件類頭文件card.h

#ifndef CARD_H#define CARD_H#include <QWidget>#include <QPaintEvent>#include <QPainter>#include <QMouseEvent>class Card:public QWidget { ? ?Q_OBJECTpublic: ? ?explicit Card(QWidget *parent = nullptr); ? ?~Card();protected: ? ?void paintEvent(QPaintEvent *event) override; ? ?void mousePressEvent(QMouseEvent *event) override; signals: ? ?void sendSelf(Card *w); };#endif // CARD_H

控件類頭文件card.cpp

#include "card.h"Card::Card(QWidget *parent):QWidget(parent) { ? ?this->setGeometry(0,0,200,400); ? ? ? //設置控件窗口大小 } Card::~Card() { }void Card::paintEvent(QPaintEvent *event) { ? ?QPainter painter(this); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //創(chuàng)建畫筆 ? ?painter.setRenderHint(QPainter::Antialiasing,true); ? ?QBrush brush; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //創(chuàng)建筆刷 ? ?brush.setColor(Qt::yellow); ? ? ? ? ? ? ? ? ? ? ? ? ? //設置筆刷顏色 ? ?brush.setStyle(Qt::SolidPattern); ? ? ? ? ? ? ? ? ? ? ? ?painter.setBrush(brush); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//設置畫筆筆刷 ? ?painter.drawRoundedRect(QRectF(5,5,190,390),10,10); ? //繪制圓角矩形并填充 }void Card::mousePressEvent(QMouseEvent *event) { ? ?Q_UNUSED(event); ? ?emit sendSelf(this); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//信號發(fā)送該控件地址 }

以上是基于widget類的控件類;

父窗口頭文件mainwindow.h

#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include "card.h"#include <QDebug>namespace Ui {class MainWindow; }class MainWindow : public QMainWindow { ? ?Q_OBJECTpublic: ? ?explicit MainWindow(QWidget *parent = 0); ? ?~MainWindow();private: ? ?Ui::MainWindow *ui; ? ?Card* cd[8]; ? ?Card *temp; ? ?QPoint startP; ? ?QPoint yuanP;private slots: ? ?void getObject(Card *w);protected: ? ?void mouseMoveEvent(QMouseEvent *event) override; ? ?void mouseReleaseEvent(QMouseEvent *event) override; };#endif // MAINWINDOW_H

父窗口頭文件mainwindow.cpp

#include "mainwindow.h"#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) : ? ?QMainWindow(parent), ? ?ui(new Ui::MainWindow) { ? ?ui->setupUi(this); ? ?for(int i=0;i<8;i++) ? ?{ ? ? ? ?cd[i] = new Card(this); ? ? ? ?connect(cd[i],&Card::sendSelf,this,&MainWindow::getObject); ? ? ? ?cd[i]->move(i%4*200,i/4*400+20); ? ?} } MainWindow::~MainWindow() { ? ?delete ui; }//獲取控件坐標void MainWindow::getObject(Card *w) { ? ?temp = w; ? ?startP = cursor().pos()-this->pos(); ? ?yuanP = temp->pos(); ? ?/*將此小部件提升到父小部件堆棧的頂部*/ ? ?temp->raise(); }//移動事件void MainWindow::mouseMoveEvent(QMouseEvent *event) { ? ?temp->move(yuanP.x()+event->x()-startP.x(),yuanP.y()+event->y()-startP.y()); }//拖拽對象置頂,卡牌積壓的時候,拖動的那張卡牌置頂void MainWindow::mouseReleaseEvent(QMouseEvent *event) { ? ?temp->raise(); }


如何實現(xiàn)可拖動自定義控件的評論 (共 條)

分享到微博請遵守國家法律
基隆市| 明星| 观塘区| 广元市| 定日县| 香港| 巴林左旗| 朝阳市| 黄骅市| 青海省| 承德县| 积石山| 古浪县| 屏山县| 保康县| 东阳市| 伊金霍洛旗| 郓城县| 七台河市| 宁城县| 鄯善县| 小金县| 抚州市| 长子县| 宁强县| 即墨市| 庄河市| 阿坝县| 特克斯县| 新邵县| 饶阳县| 邵阳县| 繁峙县| 成武县| 昭平县| 滦平县| 孝义市| 庐江县| 麟游县| 鄂托克旗| 高平市|