精华内容
下载资源
问答
  • 利用setWindowFlags可以对widget的标题栏进行各种控制。详见代码注释: #include "widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) { //setWindowFlags(Qt::CustomizeWindowHint);//无标题栏 ...

    利用setWindowFlags可以对widget的标题栏进行各种控制。详见代码注释:

    #include "widget.h"
    
    Widget::Widget(QWidget *parent)
        : QWidget(parent)
    {
        //setWindowFlags(Qt::CustomizeWindowHint);//无标题栏
        setWindowFlags(Qt::WindowTitleHint);//有标题栏和关闭按钮,但是没有最大最小化按钮,且关闭按钮不起作用
        //setWindowFlags(Qt::WindowCloseButtonHint);//使关闭按钮发挥作用
        //setWindowFlags(Qt::WindowMinMaxButtonsHint);//有最大最小化按钮,但关闭按钮不起作用
    }
    
    Widget::~Widget()
    {
    
    }
    

    下图是使用Qt::WindowTitleHint的效果。尽管标题栏中有关闭按钮,但按钮没有激活。

    展开全文
  • QT 无边框QWidget标题栏封装

    千次阅读 2018-11-06 10:02:13
    explicit XTitleWidget(QWidget *parent = 0); ~XTitleWidget(); void SetMainWidget(QWidget *pMainWidget); void SetTitle(QString title); // QWidget interface protected: virtual void ...

    XTitleWidget.h文件

    #ifndef XTITLEWIDGET_H
    #define XTITLEWIDGET_H
    
    #include <QFrame>
    
    namespace Ui {
    class XTitleWidget;
    }
    
    class XTitleWidget : public QFrame
    {
        Q_OBJECT
    
    public:
        explicit XTitleWidget(QWidget *parent = 0);
        ~XTitleWidget();
    
        void SetMainWidget(QWidget *pMainWidget);
        void SetTitle(QString title);
    
        // QWidget interface
    protected:
        virtual void mousePressEvent(QMouseEvent *) override;
        virtual void mouseReleaseEvent(QMouseEvent *) override;
        virtual void mouseMoveEvent(QMouseEvent *) override;
        virtual void mouseDoubleClickEvent(QMouseEvent *) override;
        virtual void resizeEvent(QResizeEvent*) override;
    
        void UpdateTitle(QString title);
    
    private slots:
        void on_xtitlewidget_close_clicked();
    
    private:
        Ui::XTitleWidget *ui;
    
        bool m_bMouseDown = false;
        QPoint m_lastPt;
    
        QWidget * m_pMainWidget = nullptr;
    
        QString m_title = "";
    };
    
    #endif // XTITLEWIDGET_H
    

    XTitleWidget.cpp

    #include "XTitleWidget.h"
    #include "ui_XTitleWidget.h"
    
    #include <QMouseEvent>
    
    XTitleWidget::XTitleWidget(QWidget *parent) :
        QFrame(parent),
        ui(new Ui::XTitleWidget)
    {
        ui->setupUi(this);
    
        setWindowOpacity(0.7);
    }
    
    XTitleWidget::~XTitleWidget()
    {
        delete ui;
    }
    
    void XTitleWidget::SetMainWidget(QWidget *pMainWidget)
    {
        m_pMainWidget = pMainWidget;
    }
    
    void XTitleWidget::SetTitle(QString title)
    {
        m_title = title;
        UpdateTitle(m_title);
    }
    
    //处理鼠标点击窗体移动
    void XTitleWidget::mousePressEvent(QMouseEvent *event)
    {
        if (event->button() == Qt::LeftButton)
        {
            m_bMouseDown = true;
            m_lastPt = event->globalPos();
        }
    }
    
    void XTitleWidget::mouseMoveEvent(QMouseEvent *event)
    {
        do
        {
            if(!m_bMouseDown)
            {
                break;
            }
    
            if(nullptr == m_pMainWidget)
            {
                break;
            }
    
            if(m_pMainWidget->isMaximized())
            {
                break;
            }
    
            int x = m_pMainWidget->pos().x();
            int y = m_pMainWidget->pos().y();
    
            QPoint dif = event->globalPos() - m_lastPt;
            m_pMainWidget->move(x + dif.x(), y + dif.y());
            m_lastPt = event->globalPos();
        }while(false);
    
    
    }
    
    void XTitleWidget::mouseReleaseEvent(QMouseEvent *event)
    {
        Q_UNUSED(event);
        m_bMouseDown = false;
    }
    
    
    void XTitleWidget::mouseDoubleClickEvent(QMouseEvent *event)
    {
        if (event->button() == Qt::LeftButton)
        {
    
        }
    }
    
    void XTitleWidget::resizeEvent(QResizeEvent *e)
    {
        UpdateTitle(m_title);
        QWidget::resizeEvent(e);
    }
    
    void XTitleWidget::UpdateTitle(QString title)
    {
        QFontMetrics elidfont(font());
        QString txt = elidfont.elidedText(title, Qt::ElideMiddle, ui->xtitlewidget_title_label->width());
        ui->xtitlewidget_title_label->setText(txt);
    }
    
    void XTitleWidget::on_xtitlewidget_close_clicked()
    {
        if(nullptr != m_pMainWidget)
        {
            m_pMainWidget->close();
        }
    }
    

    XTitleWidget.ui

    <?xml version="1.0" encoding="UTF-8"?>
    <ui version="4.0">
     <class>XTitleWidget</class>
     <widget class="QWidget" name="XTitleWidget">
      <property name="geometry">
       <rect>
        <x>0</x>
        <y>0</y>
        <width>423</width>
        <height>30</height>
       </rect>
      </property>
      <property name="minimumSize">
       <size>
        <width>0</width>
        <height>30</height>
       </size>
      </property>
      <property name="maximumSize">
       <size>
        <width>16777215</width>
        <height>30</height>
       </size>
      </property>
      <property name="windowTitle">
       <string>Form</string>
      </property>
      <layout class="QGridLayout" name="gridLayout">
       <property name="leftMargin">
        <number>10</number>
       </property>
       <property name="topMargin">
        <number>0</number>
       </property>
       <property name="rightMargin">
        <number>19</number>
       </property>
       <property name="bottomMargin">
        <number>0</number>
       </property>
       <property name="spacing">
        <number>0</number>
       </property>
       <item row="0" column="0">
        <layout class="QHBoxLayout" name="horizontalLayout">
         <item>
          <widget class="QLabel" name="xtitlewidget_title_label">
           <property name="sizePolicy">
            <sizepolicy hsizetype="Ignored" vsizetype="Preferred">
             <horstretch>0</horstretch>
             <verstretch>0</verstretch>
            </sizepolicy>
           </property>
           <property name="text">
            <string/>
           </property>
          </widget>
         </item>
         <item>
          <spacer name="horizontalSpacer">
           <property name="orientation">
            <enum>Qt::Horizontal</enum>
           </property>
           <property name="sizeType">
            <enum>QSizePolicy::Preferred</enum>
           </property>
           <property name="sizeHint" stdset="0">
            <size>
             <width>10</width>
             <height>20</height>
            </size>
           </property>
          </spacer>
         </item>
         <item>
          <widget class="QPushButton" name="xtitlewidget_close">
           <property name="minimumSize">
            <size>
             <width>20</width>
             <height>20</height>
            </size>
           </property>
           <property name="maximumSize">
            <size>
             <width>20</width>
             <height>20</height>
            </size>
           </property>
           <property name="text">
            <string/>
           </property>
          </widget>
         </item>
        </layout>
       </item>
      </layout>
     </widget>
     <resources/>
     <connections/>
    </ui>
    

     

    展开全文
  • // 设置界面标题与图标 virtual bool eventFilter(QObject *obj, QEvent *event); private slots: // 进行最小化、最大化/还原、关闭操作 void onClicked(); private: // 最大化/还原 void updateMaximize...

    转子 http://blog.csdn.net/liang19890820/article/details/50555298

    /头文件
    #ifndef TITLE_BAR
    #define TITLE_BAR
    
    #include <QWidget>
    
    class QLabel;
    class QPushButton;
    
    class TitleBar : public QWidget
    {
        Q_OBJECT
    
    public:
        explicit TitleBar(QWidget *parent = 0);
        ~TitleBar();
    
    protected:
    
        // 双击标题栏进行界面的最大化/还原
        virtual void mouseDoubleClickEvent(QMouseEvent *event);
    
        // 进行鼠界面的拖动
        virtual void mousePressEvent(QMouseEvent *event);
    
        // 设置界面标题与图标
        virtual bool eventFilter(QObject *obj, QEvent *event);
    
    private slots:
    
        // 进行最小化、最大化/还原、关闭操作
        void onClicked();
    
    private:
    
        // 最大化/还原
        void updateMaximize();
    
    private:
        QLabel *m_pIconLabel;
        QLabel *m_pTitleLabel;
        QPushButton *m_pMinimizeButton;
        QPushButton *m_pMaximizeButton;
        QPushButton *m_pCloseButton;
    };
    
    #endif // TITLE_BAR
    //实现文件
    #include <QLabel>
    #include <QPushButton>
    #include <QHBoxLayout>
    #include <QEvent>
    #include <QMouseEvent>
    #include <QApplication>
    #include "title_bar.h"
    
    #ifdef Q_OS_WIN
    #pragma comment(lib, "user32.lib")
    #include <qt_windows.h>
    #endif
    
    TitleBar::TitleBar(QWidget *parent)
        : QWidget(parent)
    {
        setFixedHeight(30);
    
        m_pIconLabel = new QLabel(this);
        m_pTitleLabel = new QLabel(this);
        m_pMinimizeButton = new QPushButton(this);
        m_pMaximizeButton = new QPushButton(this);
        m_pCloseButton = new QPushButton(this);
    
        m_pIconLabel->setFixedSize(20, 20);
        m_pIconLabel->setScaledContents(true);
    
        m_pTitleLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
    
        m_pMinimizeButton->setFixedSize(27, 22);
        m_pMaximizeButton->setFixedSize(27, 22);
        m_pCloseButton->setFixedSize(27, 22);
    
        m_pTitleLabel->setObjectName("whiteLabel");
        m_pMinimizeButton->setObjectName("minimizeButton");
        m_pMaximizeButton->setObjectName("maximizeButton");
        m_pCloseButton->setObjectName("closeButton");
    
        m_pMinimizeButton->setToolTip("Minimize");
        m_pMaximizeButton->setToolTip("Maximize");
        m_pCloseButton->setToolTip("Close");
    
        QHBoxLayout *pLayout = new QHBoxLayout(this);
        pLayout->addWidget(m_pIconLabel);
        pLayout->addSpacing(5);
        pLayout->addWidget(m_pTitleLabel);
        pLayout->addWidget(m_pMinimizeButton);
        pLayout->addWidget(m_pMaximizeButton);
        pLayout->addWidget(m_pCloseButton);
        pLayout->setSpacing(0);
        pLayout->setContentsMargins(5, 0, 5, 0);
    
        setLayout(pLayout);
    
        connect(m_pMinimizeButton, SIGNAL(clicked(bool)), this, SLOT(onClicked()));
        connect(m_pMaximizeButton, SIGNAL(clicked(bool)), this, SLOT(onClicked()));
        connect(m_pCloseButton, SIGNAL(clicked(bool)), this, SLOT(onClicked()));
    }
    
    TitleBar::~TitleBar()
    {
    
    }
    
    void TitleBar::mouseDoubleClickEvent(QMouseEvent *event)
    {
        Q_UNUSED(event);
    
        emit m_pMaximizeButton->clicked();
    }
    
    void TitleBar::mousePressEvent(QMouseEvent *event)
    {
    #ifdef Q_OS_WIN
        if (ReleaseCapture())
        {
            QWidget *pWindow = this->window();
            if (pWindow->isTopLevel())
            {
               SendMessage(HWND(pWindow->winId()), WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
            }
        }
           event->ignore();
    #else
    #endif
    }
    
    bool TitleBar::eventFilter(QObject *obj, QEvent *event)
    {
        switch (event->type())
        {
        case QEvent::WindowTitleChange:
        {
            QWidget *pWidget = qobject_cast<QWidget *>(obj);
            if (pWidget)
            {
                m_pTitleLabel->setText(pWidget->windowTitle());
                return true;
            }
        }
        case QEvent::WindowIconChange:
        {
            QWidget *pWidget = qobject_cast<QWidget *>(obj);
            if (pWidget)
            {
                QIcon icon = pWidget->windowIcon();
                m_pIconLabel->setPixmap(icon.pixmap(m_pIconLabel->size()));
                return true;
            }
        }
        case QEvent::WindowStateChange:
        case QEvent::Resize:
            updateMaximize();
            return true;
        }
        return QWidget::eventFilter(obj, event);
    }
    
    void TitleBar::onClicked()
    {
        QPushButton *pButton = qobject_cast<QPushButton *>(sender());
        QWidget *pWindow = this->window();
        if (pWindow->isTopLevel())
        {
            if (pButton == m_pMinimizeButton)
            {
                pWindow->showMinimized();
            }
            else if (pButton == m_pMaximizeButton)
            {
                pWindow->isMaximized() ? pWindow->showNormal() : pWindow->showMaximized();
            }
            else if (pButton == m_pCloseButton)
            {
                pWindow->close();
            }
        }
    }
    
    void TitleBar::updateMaximize()
    {
        QWidget *pWindow = this->window();
        if (pWindow->isTopLevel())
        {
            bool bMaximize = pWindow->isMaximized();
            if (bMaximize)
            {
                m_pMaximizeButton->setToolTip(tr("Restore"));
                m_pMaximizeButton->setProperty("maximizeProperty", "restore");
            }
            else
            {
                m_pMaximizeButton->setProperty("maximizeProperty", "maximize");
                m_pMaximizeButton->setToolTip(tr("Maximize"));
            }
    
            m_pMaximizeButton->setStyle(QApplication::style());
        }
    }
    Widget::Widget(QWidget *parent)
        : QWidget(parent)
    {
        setWindowFlags(Qt::FramelessWindowHint | windowFlags());
    
        TitleBar *pTitleBar = new TitleBar(this);
        installEventFilter(pTitleBar);
    
        resize(400, 300);
        setWindowTitle("Custom Window");
        setWindowIcon(QIcon(":/Images/logo"));
    
        QPalette pal(palette());
        pal.setColor(QPalette::Background, QColor(50, 50, 50));
        setAutoFillBackground(true);
        setPalette(pal);
    
        QVBoxLayout *pLayout = new QVBoxLayout();
        pLayout->addWidget(pTitleBar);
        pLayout->addStretch();
        pLayout->setSpacing(0);
        pLayout->setContentsMargins(0, 0, 0, 0);
        setLayout(pLayout);
    }

    installEventFilter必须在setWindowTitle、setWindowIcon之前调用,因为必须先安装事件过滤器,相应事件触发时,才会进入标题栏的eventFilter事件中。

    转载于:https://my.oschina.net/hanxiaodong/blog/1537799

    展开全文
  • bool event(QEvent *event) { if (event->type() == QEvent::NonClientAreaMouseButtonDblClick) qDebug() << "title double clicked event"; return QWidget::event(event); }
    bool event(QEvent *event)
    {
       
        if (event->type() == QEvent::NonClientAreaMouseButtonDblClick)
            qDebug() << "title double clicked event"
    展开全文
  • 实现自定义无标题窗口拖动,鼠标移动到上下左右周围8个位置改变鼠标形状,能自由缩放窗体,无bug
  • QT设置QWidget背景色踩坑记

    千次阅读 2020-04-01 16:33:49
    自然,设置某个QWidget组件的背景色是一个极为常见的需求。但就在这个及其简单的需求里,作者也踩到坑,费了半天时间,故有此文记录。 需求 以实现一个视频的缩略图按钮为例,具体来说是实现如下效果: 问题 这还不...
  • widget.h virtual bool event(QEvent *event); ... if (event->type() == QEvent::... return QWidget::event(event); } 参考: https://www.yuque.com/docs/share/98c9111f-ee06-4f09-9f3e-5c61718b0fce
  • QWidget标题栏双击事件

    2015-06-17 13:37:00
    widget.h virtual bool event(QEvent *event);   widget.cpp bool Widget:: ... QWidget:: event ( event ); }   转载于:https://www.cnblogs.com/bugchecker/p/4583041.html
  • Qt自定义QWidget控件设置QSS

    千次阅读 2020-08-05 19:13:02
    自定义QWidget后,发现对于QWidget设置样式失效。想让自定义控件,能够采用QSS中QWidget生效。采用如下方法可以解决: 调用setAttribute(Qt::WA_StyledBackground,true); QStyleOption opt; opt.init(this); ...
  • 一般自定义标题栏时,就需要将原窗口的标题栏隐藏掉。默认情况下窗口无法被鼠标拖动的,需要自己处理鼠标事件,移动窗口达到拖动效果。 二、实现代码 只实现了窗口的拖动,随意拉伸没有实现。 如果要完美实现拉伸...
  • 通常我们不想使用QMainWindow提供的标题栏,或者是QWidget标题栏、边框,这时候我们使用了一个普通的QWidget,没有标题栏没有边框,但我们又需要有标题栏拖动的功能,边框改变大小的功能,看上去是个很矛盾的想法...
  • 1、设置窗体的背景色在构造函数里添加代码,需要添加头文件qpalette或qguiQPalette pal = palette();pal.setColor(QPalette::Background, QColor(0x00,0xff,0x00,0x00));setPalette(pal);通过设置窗体的背景色来实现...
  • Qt无标题窗口

    2018-05-21 13:45:03
    一个比较简单的Qt无标题窗口,基本实现了现在默认窗口自带的功能,可以用于界面美化自绘标题栏。
  • Qt中设置widget背景图片

    千次阅读 2020-07-17 18:43:00
    标题Qt中设置widget背景图片 第一类方法:setStyleSheet()中设置 1.直接在代码中书写 this->setStyleSheet("background-image:url(:/bmp/IMG_0345.JPG)");//设置图片的背景路径 2.在Qt中添加图片的资源,然后...
  • 一、QT Widgets设置软件的标题: setWindowTitle("辅助系统 V1.0"); 二、设置软件的窗口主图标: 1)在项目中添加Qt资源文件,自定义命名; 2)将窗口所需要图标/图片放在一个文件夹内,如images文件夹,然后从qt...
  • Qt 怎么设置隐藏标题栏 Qt 怎么设置隐藏标题栏 Qt 怎么设置隐藏标题栏 Qt 怎么设置隐藏标题
  • 1、通过设置QPalette来设置背景图片。关键点在于高亮处。参考自(https://stackoverflow.com/questions/2671842/setting-background-image-for-qpushbutton)。对于qlabel 设置文本后,会调用父对象的qpaintevent,...
  • qwidget与qml交互

    2019-07-23 15:39:46
    QWidget嵌入qml,实现QWidget与qml的交互、无标题栏、可拉伸、可拖动、可切换qml页面
  • QT 设置窗口标题

    千次阅读 2019-10-07 12:43:11
    setWindowTitle("爱白菜的小昆虫"); 转载于:https://www.cnblogs.com/xuqiulin/p/11517745.html
  • QHeaderView 表头设置QWidget控件

    千次阅读 2018-06-27 20:26:34
    (恶心的需求)表头要求特殊的字符串(有下标的那种)。本来去掉了表头,将表格的第一行作为表头,这样就可以在表格上添加... index, QWidget * widget )这个函数,所以采用这个方式。效果如下:代码如下: QStrin...
  • this->setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog);
  • 1.在项目文件夹里创建名为*.rc的文件,如mya.rc。 2.文件中写入IDI_ICON1 ICON DISCARDABLE "my.ico" 其中,my.ico为图标的文件名。 3.将文件my.ico拷贝到项目文件夹内。 ...若在qt creator中,用记事本打开...
  • QT设置窗体标题及背景颜色

    万次阅读 2019-03-17 10:05:38
    1.设置标题* 在widget.cpp文件下的 Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ } 这个函数中加上setWindowTitle(“标题”); 如:把标题设为计算器 setWindowTitle(“计算器”); ** 2...
  • 以下是您必须遵循的步骤:有你的主窗口,可以是QMainWindow,或者QWidget,或者任何你想继承的[widget]。在设置旗,self.setWindowFlags(Qt.FramelessWindowHint)在实现你自己的移动。在实现自己的按钮(关闭、最大、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,302
精华内容 4,120
关键字:

设置qwidget标题