日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

qt android 对话框,Qt自定义Dialog

發布時間:2025/3/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 qt android 对话框,Qt自定义Dialog 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

默認對話框

Qt默認的對話框是系統自帶的樣式,不同版本的windows也有些許不同,如果希望風格統一的話,這時候就需要自定義一個屬于自己的對話框了

系統自帶

自定義樣式

新建Qt設計師類

雖然是自定義界面,但是有一個.ui文件放置按鈕還是要方便些,如果是直接新建一個C++類文件就需要在代碼中添加相關的控件了

新建設計師類

去除默認的樣式

在構造函數中加上:

setAttribute(Qt::WA_TranslucentBackground, true);

setWindowFlags(Qt::Window | Qt::FramelessWindowHint

| Qt::WindowSystemMenuHint | Qt::WindowMinimizeButtonHint

| Qt::WindowMaximizeButtonHint);

就把默認的標題欄、背景等給去掉了。現在運行的話背景是透明的,除了自己加的控件外,其他啥也沒有。

重寫paintEvent

自己對于Dialog的界面有什么需求,可以在paintEvent函數中添加。例如,我想設置邊框為圓角,在文本輸入框上下各有一條分割線:

void LoginDialog::paintEvent(QPaintEvent *event)

{

QPainterPath path;

path.setFillRule(Qt::WindingFill);

QRect rect = QRect(0, 0, this->width(), this->height());

path.addRoundRect(rect,10,10);

QPainter painter(this);

painter.setRenderHint(QPainter::Antialiasing, true);

painter.fillPath(path, QBrush(Qt::white));

painter.setPen(Qt::gray);

painter.drawPath(path);

painter.drawLine(rect.left()+40, 60, rect.right()-40, 60);

painter.drawLine(rect.left()+40, rect.bottom()-70, rect.right()-40, rect.bottom()-70);

}

重寫鼠標事件

由于默認的情況被我們去掉了,此時對話框是不能移動的,需要重寫鼠標事件,函數聲明:

void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;

void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;

void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;

具體實現:

void LoginDialog::paintEvent(QPaintEvent *event)

{

QPainterPath path;

path.setFillRule(Qt::WindingFill);

QRect rect = QRect(0, 0, this->width(), this->height());

path.addRoundRect(rect,10,10);

QPainter painter(this);

painter.setRenderHint(QPainter::Antialiasing, true);

painter.fillPath(path, QBrush(Qt::white));

painter.setPen(Qt::gray);

painter.drawPath(path);

painter.drawLine(rect.left()+40, 60, rect.right()-40, 60);

painter.drawLine(rect.left()+40, rect.bottom()-70, rect.right()-40, rect.bottom()-70);

}

void LoginDialog::mousePressEvent(QMouseEvent *event)

{

if( event->button() == Qt::LeftButton){

m_Press = event->globalPos();

leftBtnClk = true;

}

event->ignore();//表示繼續向下傳遞事件,其他的控件還可以去獲取

}

void LoginDialog::mouseReleaseEvent(QMouseEvent *event)

{

if( event->button() == Qt::LeftButton ){

leftBtnClk = false;

}

event->ignore();

}

void LoginDialog::mouseMoveEvent(QMouseEvent *event)

{

if( leftBtnClk ){

m_Move = event->globalPos();

this->move( this->pos() + m_Move - m_Press );

m_Press = m_Move;

}

event->ignore();

}

添加自己的控件

之后就像是在用默認的Dialog一樣,在.ui中添加需要的控件,以及需要的信號/槽函數這些了。

界面設計

除了重繪的背景之外,其他的控件都可以在ui文件里添加。附上Github鏈接地址。

總結

以上是生活随笔為你收集整理的qt android 对话框,Qt自定义Dialog的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。