嵌入式多媒體設計7--QDockWidget大小調整及隱藏標題


做播放器當然少不了播放列表,播放列表又好幾種形式,一種使用另外的窗口,如千千靜聽;

一種使用多標簽,如酷狗音樂;一種使用停靠窗口,如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。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM