qtoolbutton设置成无边框_C++ Qt库 如何修改对话框本身的属性(如:最大化、最小化按钮、关闭按钮、边框粗细、颜色等)...

展开全部

注意, QT有些对话框默认用的native对话框,需要重新设置。

你要改窗口边框的样式?虽e5a48de588b662616964757a686964616f31333332613038然Qt不支持,但有一个折衷的方法:把窗口设置成没有边框的,然后在client区域做出自定义的边框,实现边框的部分功能。这样看起来像是改变了窗口的样式。

Qt faq有一个例子,贴到这里格式乱掉,建议谷歌搜索"Qt faq How can I handle events in the titlebar and change its color etc"

#include class TitleBar :publicQWidget{ Q_OBJECTpublic: TitleBar(QWidget*parent) { // Don't let this widget inherit the parent's backround color setAutoFillBackground(true); // Use a brush with a Highlight color role to render the background setBackgroundRole(QPalette::Highlight); minimize =newQToolButton(this); maximize =newQToolButton(this); close=newQToolButton(this); // Use the style to set the button pixmaps QPixmap pix = style()->standardPixmap(QStyle::SP_TitleBarCloseButton); close->setIcon(pix); maxPix = style()->standardPixmap(QStyle::SP_TitleBarMaxButton); maximize->setIcon(maxPix); pix = style()->standardPixmap(QStyle::SP_TitleBarMinButton); minimize->setIcon(pix); restorePix = style()->standardPixmap(QStyle::SP_TitleBarNormalButton); minimize->setMinimumHeight(20); close->setMinimumHeight(20); maximize->setMinimumHeight(20); QLabel*label =newQLabel(this); label->setText("Window Title"); parent->setWindowTitle("Window Title"); QHBoxLayout*hbox =newQHBoxLayout(this); hbox->addWidget(label); hbox->addWidget(minimize); hbox->addWidget(maximize); hbox->addWidget(close); hbox->insertStretch(1,500); hbox->setSpacing(0); setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed); maxNormal = false; connect(close, SIGNAL( clicked()), parent, SLOT(close())); connect(minimize, SIGNAL( clicked()),this, SLOT(showSmall())); connect(maximize, SIGNAL( clicked()),this, SLOT(showMaxRestore())); } publicslots: void showSmall() { parentWidget()->showMinimized(); } void showMaxRestore() { if(maxNormal){ parentWidget()->showNormal(); maxNormal =!maxNormal; maximize->setIcon(maxPix); }else{ parentWidget()->showMaximized(); maxNormal =!maxNormal; maximize->setIcon(restorePix); } }protected: void mousePressEvent(QMouseEvent*me) { startPos = me->globalPos(); clickPos = mapToParent(me->pos()); } void mouseMoveEvent(QMouseEvent*me) { if(maxNormal) return; parentWidget()->move(me->globalPos()- clickPos); } private: QToolButton*minimize; QToolButton*maximize; QToolButton*close; QPixmap restorePix, maxPix; bool maxNormal; QPoint startPos; QPoint clickPos;}; class Frame :publicQFrame{public: Frame() { m_mouse_down = false; setFrameShape(Panel); // Make this a borderless window which can't // be resized or moved via the window system setWindowFlags(Qt::FramelessWindowHint); setMouseTracking(true); m_titleBar =new TitleBar(this); m_content =newQWidget(this); QVBoxLayout*vbox =newQVBoxLayout(this); vbox->addWidget(m_titleBar); vbox->setMargin(0); vbox->setSpacing(0); QVBoxLayout*layout =newQVBoxLayout(this); layout->addWidget(m_content); layout->setMargin(5); layout->setSpacing(0); vbox->addLayout(layout); } // Allows you to access the content area of the frame // where widgets and layouts can be added QWidget*contentWidget()const{return m_content;} TitleBar *titleBar()const{return m_titleBar;} void mousePressEvent(QMouseEvent*e) { m_old_pos = e->pos(); m_mouse_down = e->button()==Qt::LeftButton; } void mouseMoveEvent(QMouseEvent*e) { int x = e->x(); int y = e->y(); if(m_mouse_down){ int dx = x - m_old_pos.x(); int dy = y - m_old_pos.y(); QRect g = geometry(); if(left) g.setLeft(g.left()+ dx); if(right) g.setRight(g.right()+ dx); if(bottom) g.setBottom(g.bottom()+ dy); setGeometry(g); m_old_pos =QPoint(!left ? e->x(): m_old_pos.x(), e->y()); }else{ QRect r = rect(); left = qAbs(x - r.left())<=5; right = qAbs(x - r.right())<=5; bottom = qAbs(y - r.bottom())<=5; bool hor = left | right; if(hor && bottom){ if(left) setCursor(Qt::SizeBDiagCursor); else setCursor(Qt::SizeFDiagCursor); }elseif(hor){ setCursor(Qt::SizeHorCursor); }elseif(bottom){ setCursor(Qt::SizeVerCursor); }else{ setCursor(Qt::ArrowCursor); } } } void mouseReleaseEvent(QMouseEvent*e) { m_mouse_down = false; } private: TitleBar *m_titleBar; QWidget*m_content; QPoint m_old_pos; bool m_mouse_down; bool left, right, bottom;}; #include "main.moc" int main(int argc,char**argv){ QApplication app(argc, argv); Frame box; box.move(0,0); QVBoxLayout*l =newQVBoxLayout(box.contentWidget()); l->setMargin(0); QTextEdit*edit =newQTextEdit(box.contentWidget()); l->addWidget(edit); box.show(); return app.exec(); }

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值