qt android 对话框,Qt自定义Dialog
默認(rèn)對話框
Qt默認(rèn)的對話框是系統(tǒng)自帶的樣式,不同版本的windows也有些許不同,如果希望風(fēng)格統(tǒng)一的話,這時候就需要自定義一個屬于自己的對話框了
系統(tǒng)自帶
自定義樣式
新建Qt設(shè)計師類
雖然是自定義界面,但是有一個.ui文件放置按鈕還是要方便些,如果是直接新建一個C++類文件就需要在代碼中添加相關(guān)的控件了
新建設(shè)計師類
去除默認(rèn)的樣式
在構(gòu)造函數(shù)中加上:
setAttribute(Qt::WA_TranslucentBackground, true);
setWindowFlags(Qt::Window | Qt::FramelessWindowHint
| Qt::WindowSystemMenuHint | Qt::WindowMinimizeButtonHint
| Qt::WindowMaximizeButtonHint);
就把默認(rèn)的標(biāo)題欄、背景等給去掉了。現(xiàn)在運行的話背景是透明的,除了自己加的控件外,其他啥也沒有。
重寫paintEvent
自己對于Dialog的界面有什么需求,可以在paintEvent函數(shù)中添加。例如,我想設(shè)置邊框為圓角,在文本輸入框上下各有一條分割線:
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);
}
重寫鼠標(biāo)事件
由于默認(rèn)的情況被我們?nèi)サ袅?#xff0c;此時對話框是不能移動的,需要重寫鼠標(biāo)事件,函數(shù)聲明:
void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
具體實現(xiàn):
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();//表示繼續(xù)向下傳遞事件,其他的控件還可以去獲取
}
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();
}
添加自己的控件
之后就像是在用默認(rèn)的Dialog一樣,在.ui中添加需要的控件,以及需要的信號/槽函數(shù)這些了。
界面設(shè)計
除了重繪的背景之外,其他的控件都可以在ui文件里添加。附上Github鏈接地址。
總結(jié)
以上是生活随笔為你收集整理的qt android 对话框,Qt自定义Dialog的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android时间轴左右交叉布局,快速简
- 下一篇: android activity vie