嵌入式多媒体设计7--QDockWidget大小调整及隐藏标题

本文介绍了如何在Qt中解决QDockWidget大小调整问题及隐藏其标题栏,通过继承QListWidget或使用自定义大小设置方法实现大小调整,并通过将标题栏设置为空Widget来去除默认标题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://www.cnblogs.com/xdao/archive/2013/04/09/mutilmedia-7.html

做播放器当然少不了播放列表,播放列表又好几种形式,一种使用另外的窗口,如千千静听;

一种使用多标签,如酷狗音乐;一种使用停靠窗口,如QQ影音。由于我做的是播放器,是在

4.3寸的屏上运行,便选择了停靠窗口。

在Qt里停靠窗口是QDockWidget,它的显示区域如图,摘自Qt帮助文档。

可以对它的属性进行一系列的设置,具体的看帮助文档。

可是当我使用QDockWidget后发现,右边的列表居然占了屏幕一大半。于是我就用resize来调整它

的大小,可是依然如故;接着我又把QListWidget加上resize,结果还是如此。没办法了,只好借助

伟大的网络了,原来是“QDockWidget acts as a wrapper for its child widget, custom size

hints, minimum and maximum sizes and size policies have to be implemented in the

child widget.”即我们要在子控件里设置大小,来自qt的faq,它给的代码如下:

复制代码
    #include <QtGui>  
     
    class Label : public QLabel
    {
    public:    
        Label(QWidget *parent) : QLabel(parent)
        {              
            setAutoFillBackground(true);
            setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
            QPalette pal = palette();              
            pal.setBrush(QPalette::Window, Qt::red);                
            setText("The label");          
            setPalette(pal);
        }      
     
        QSize sizeHint() const
        {          
            return QSize(400, 500);    
        }
    };
     
    int main(int argc, char **argv)
    {    
        QApplication app(argc, argv);
        QMainWindow box;    
        box.setCentralWidget(new QLabel("Central Widget", &box));
        QDockWidget *dock = new QDockWidget(&box);    
        dock->setWidget(new Label(dock));    
        box.addDockWidget(Qt::TopDockWidgetArea, dock );
        box.show();    
        return app.exec();    
    }
复制代码

不过我可不想继承QListWidget,于是继续搜索,便找到了下面的方法,来自stackoverflow

代码如下:

复制代码
//在头文件里添加
private void setDockSize(QDockWidget *dock, int setWidth, int setHeight);
  public slots:
  void returnToOldMaxMinSizes();


//在源文件里添加
QSize oldMaxSize, oldMinSize;

void MainWindow::setDockSize(QDockWidget* dock, int setWidth,int setHeight)
{

    oldMaxSize=dock->maximumSize();
    oldMinSize=dock->minimumSize();

  if (setWidth>=0)
    if (dock->width()<setWidth)
        dock->setMinimumWidth(setWidth);
    else dock->setMaximumWidth(setWidth);
  if (setHeight>=0)
    if (dock->height()<setHeight)
        dock->setMinimumHeight(setHeight);
    else dock->setMaximumHeight(setHeight);

    QTimer::singleShot(1, this, SLOT(returnToOldMaxMinSizes()));
}

void MainWindow::returnToOldMaxMinSizes()
{
    ui->dockWidget->setMinimumSize(oldMinSize);
    ui->dockWidget->setMaximumSize(oldMaxSize);
}
复制代码

 

大小调整解决了,可是QDockWidget还有个标题栏,即使不设置标题,它也会显示空白的标题,这

与我的需求不符,可惜我不会隐藏,继续搜索发现了一个非常天才的做法,来自Qt论坛,代码如下:

QWidget * qw=new QWidget(this);
Dockwidget->setTitleBarWidget(qw);

哈哈,居然把标题栏重新设置为一个空的Widget。

 


作者:半山 
出处:http://www.cnblogs.com/xdao/ 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 
该文章也同时发布在我的独立博客中-IT知行


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值