我是QT的新手.我在我的项目中使用PyQT进行GUI开发.我想在我的应用程序中实现这种布局.此应用程序从图像数据库中搜索图像.Google图片搜索布局非常适合我的目的.
alt text http://img821.imageshack.us/img821/8379/window2.png
我正在阅读"使用Python和Qt进行快速GUI编程"这本书,我对布局很熟悉.我想我需要在每个网格框中使用网格布局和每个结果图像.并在每个网格框内使用(image,Qlabel,Qlabel)的垂直布局.
这些是我面临的一些问题.
重要的是,我无法显示图像.我需要什么控件/小部件?我找不到类似于PictureBox的.NET
如何通过像图像中的固定间隙分离这些图像结果?我正在使用水平和垂直垫片,但这不起作用?
如何将QLabel设置为可点击(如超链接).我不想打开一个URL.只是文字应该是可点击的.所以,当用户点击链接时.我可以显示更多信息(例如,当用户点击"查看"时点击下一页编号时的下一组结果或带有全尺寸图像的新窗口)我们是否有一些新的控件?
这是另一个重要问题.我将显示结果的页码(如图所示)并假设它们是可点击的.如何加载新page
的结果?我的意思是page
QT 相当于什么?
你可以猜到.这肯定不会是GUI的第一页.第一页将与http://google.com(一个带有按钮的大徽标和文本框)完全相同.当用户点击搜索按钮时.将显示此页面.同样的问题出现了.怎么改变页面?
请列出我将需要的控件列表.告诉我,如果我不知道某事.
1/2.要显示图像和标签,请使用QListWidget,其中视图模式设置为QListView :: IconMode.但是,如果您需要自定义显示超出QListWidget/QListWidgetItem api可以提供的内容,您将需要创建自己的QAbstractListModel并使用标准QListView.确保并阅读Qt关于型号/视图的入门知识.
至于间隔图像,请检查列表视图上的间距属性.
以下是KDE的Dolphin文件管理器的示例:
3.使用常规QLabel,但将内容设置为href.
例:
编辑:糟糕我从您的标签中看到您使用的是PyQt,以下是C++,但应该与您在python中的操作类似.
QLabel *linkLabel = new QLabel; linkLabel->setTextFormat( Qt::RichText ) linkLabel->setText( " Click me! " ); connect( linkLabel, SIGNAL( linkActivated ( const QString & link ) ), .... )
4. 好吧,既然你使用的是模型/视图,为什么还要有页码呢?用户只能滚动视图,将显示更多图片.这是迄今为止最简单的解决方案,因为一旦完成M/V设置,您就无需执行任何操作!
但是,如果您确实要显示页码,则需要在模型中进行更多工作.例如,在模型中跟踪"当前页面"并仅允许访问"当前页面"上的图像.然后在连接到linkActivated()信号的插槽中告诉模型更改页面.我不会详细介绍,因为这严重违反了模型/视图背后的整个想法.这样做的"正确方法"是继承QListView并添加分页支持,但就像我说为什么不使用滚动条?这样做并没有任何表现.
5.使用QStackedWidget,addWidget()所有"页面",然后根据需要调用setCurrentIndex/Widget()来切换页面.
思考:您似乎非常致力于克隆Google Image搜索的外观,感觉和行为,这很好,但Google Image Search是一个使用与普通桌面应用程序截然不同的交互范例的Web应用程序(链接,页面等).您可能正在开发一个桌面应用程序,并且通过尝试模拟Web应用程序的行为,您会发现它很难,因为API不是为了支持那些类型的交互而设计的.无论如何,这是可行的,但你会为你的工作做好准备.
如果您非常希望坚持基于Web的交互方式,为什么不用javascript和HTML编写应用程序并将其丢弃到QWebView中?