2010-07-01 87 views
3

我是QT新手。我在我的項目中使用PyQT進行GUI開發。我想在我的應用程序中實現這種佈局。此應用程序從圖像數據庫中搜索圖像。 Google圖片搜索佈局非常適合我的目的。如何在QT(PyQT)中實現與Google圖片搜索類似的佈局?

alt text http://img821.imageshack.us/img821/8379/window2.png

我下面的這本書「快速GUI編程Python和Qt的」和我熟悉的佈局。我想我需要使用每個網格框中的每個結果圖像的網格佈局。 &在每個網格框內使用垂直佈局(圖像,Qlabel,Qlabel)。

這些都是我面臨的一些問題。

  1. 重要的是,我無法顯示圖像。我需要什麼控制/小部件?我找不到類似於.NET的PictureBox的任何東西

  2. 如何通過像圖像中的固定間隙來分離這些圖像結果?我正在使用Horizo​​ntal &垂直間距,但這不起作用?

  3. 如何設置QLabel可點擊(如超鏈接)。我不想打開一個URL。只是文字應該是可點擊的。所以,當用戶點擊鏈接。我可以顯示更多信息(比如下一組結果,當他點擊下一頁數字或者當用戶點擊'視圖'時全圖顯示圖像的新窗口)我們是否有這種新的控制方式?

  4. 這是另一個重要問題。假設它們是可點擊的,我將顯示結果的頁碼(如圖所示)&。如何加載新的page結果?我的意思是在QT中相當於page

  5. 正如你所猜測的。這絕對不會成爲GUI的第一頁。第一頁將完全像http://google.com(一個大標誌&帶有按鈕的文本框)。當用戶點擊搜索按鈕時。此頁面將顯示。再次出現同樣的問題。如何更改頁面?

請給出我需要的控件列表。告訴我,如果我不知道的東西。

+1

我經常發現有用的東西 - 將小部件的背景顏色設置爲藍色或綠色或可笑的東西。然後,您將能夠看到小部件的實際位置以及其他元素的位置。我對QT不太熟悉,但在任何語言的*任何* GUI庫中工作時都會有所幫助。我不知道QT是否這樣做,但你應該能夠將一個點擊類型的事件綁定到小部件。 – 2010-07-01 14:53:42

回答

13

1/2。 要顯示圖像和標籤,請使用QListWidget,將視圖模式設置爲QListView :: IconMode。但是,如果您需要自定義超出QListWidget/QListWidgetItem api所能提供的顯示內容,您需要創建自己的QAbstractListModel並使用標準QListView。 確保並閱讀Qt's primer on model/view

至於間距的圖像,檢查列表視圖spacing property

以下是KDE的Dolphin文件管理器的例子: Dolphin's icon mode

3。使用常規QLabel,但將內容設置爲href。

例子:

編輯:哎呀,我從你的代碼中看到您正在使用PyQt的,下面是C++,不過應該類似於您在蟒蛇做什麼。

QLabel *linkLabel = new QLabel; 
    linkLabel->setTextFormat(Qt::RichText) 
    linkLabel->setText("<a href=\"someurl\"> Click me! </a>"); 
    connect(linkLabel, SIGNAL(linkActivated (const QString & link)), ....) 

4. 好吧,既然你使用的是模型/視圖,何苦具有所有頁碼?用戶將能夠滾動視圖並顯示更多圖片。這是迄今爲止最簡單的解決方案,因爲您在進行M/V設置後無需執行任何操作!

但是,如果您確實想顯示頁碼,則需要在模型中進行更多工作。例如,跟蹤模型中的「當前頁面」,只允許訪問「當前頁面」上的圖像。然後在連接到linkActivated()信號的插槽中告訴模型更改頁面。由於這嚴重違反了模型/視圖背後的整體思路,因此我不會詳細討論。這樣做的「正確方法」是繼承QListView並添加分頁支持,但就像我說的爲什麼不使用滾動條?沒有任何性能命中這樣做。

5.使用QStackedWidget,addWidget()將所有「頁面」添加到它,然後根據需要調用setCurrentIndex/Widget()來切換頁面。

思想: 似乎你很投入地克隆的外觀,感覺,和谷歌圖片搜索,這是很好的現象,但谷歌圖片搜索是使用交互範例是不是非常不同的Web應用程序一個普通的桌面應用程序(鏈接,頁面等)。您可能正在開發一個桌面應用程序,並且試圖模擬Web應用程序的行爲,您會發現它很難,因爲API並不是爲支持這些交互而設計的。通過一切手段,這是可行的,但你會爲你切斷你的工作。

如果您非常想要堅持基於Web的交互風格,爲什麼不用JavaScript和HTML編碼您的應用程序,並將它扔在QWebView

+0

++,很好的答案 – 2011-04-26 09:58:56

3

嘗試使用QListWidget並將viewMode設置爲IconMode。它應該爲你做所有事情。但是如果您需要自定義您的數據顯示,請使用帶有您自己的/標準模型和自己的繪圖代理的QListView

+0

+1,用於提倡解決此問題的正確Qt方法。除非你的圖像網格是靜態的,否則你應該使用Qt的Model/View來解決這個問題。 – Casey 2010-07-01 18:11:40

相關問題