Python 如何在QT(PyQT)中实现类似于Google图像搜索的布局?
我是新来的。我在我的项目中使用PyQT进行GUI开发。我想在我的应用程序中实现这种布局。此应用程序从图像数据库中搜索图像。谷歌图像搜索布局是我的理想选择 我正在学习“使用Python和Qt进行快速GUI编程”这本书,我对布局很熟悉。我想我需要使用网格布局,每个网格框中的每个结果图像对每个网格框内的(图像、Qlabel、Qlabel)使用垂直布局 这些是我面临的一些问题Python 如何在QT(PyQT)中实现类似于Google图像搜索的布局?,python,qt,qt4,pyqt,Python,Qt,Qt4,Pyqt,我是新来的。我在我的项目中使用PyQT进行GUI开发。我想在我的应用程序中实现这种布局。此应用程序从图像数据库中搜索图像。谷歌图像搜索布局是我的理想选择 我正在学习“使用Python和Qt进行快速GUI编程”这本书,我对布局很熟悉。我想我需要使用网格布局,每个网格框中的每个结果图像对每个网格框内的(图像、Qlabel、Qlabel)使用垂直布局 这些是我面临的一些问题 重要的是,我无法显示图像。我需要什么控件/小部件?我找不到与.NET的PictureBox类似的东西 如何通过像图中那样的固
页面
?我的意思是,QT中的page
的等价物是什么请给出一个我需要的控件列表。如果我不知道什么,请告诉我。尝试使用viewMode设置为IconMode的QListWidget。这应该对你有好处。但是,如果您需要自定义数据显示,请使用QListView和您自己的/标准模型以及自己的代理进行绘制1/2。 要显示图像和标签,请使用设置为QListView::IconMode的视图模式。但是,如果需要定制超出QListWidget/QListWidgetItem api所能提供范围的显示,则需要创建自己的并使用标准QListView。 确认并阅读 至于图像间距,请在列表视图上签出 以下是KDE的Dolphin文件管理器的一个示例: 3.使用常规QLabel,但将内容设置为href 例如: <>编辑:OOPS,我从你的标签中看到你在使用pyQt,下面是C++,但是应该类似于你在Python中所做的。
QLabel*linkLabel=新的QLabel;
linkLabel->setTextFormat(Qt::RichText)
链接标签->设置文本(“”);
连接(链接标签、信号(链接激活(常量链接和链接)),…)
4.
那么,既然您使用的是模型/视图,为什么还要麻烦设置页码呢?用户只需滚动视图,即可显示更多图片。这是迄今为止最简单的解决方案,因为一旦你有了M/V设置,你不必做任何事情
但是,如果您真的想显示页码,则需要在模型中进行更多的工作。例如,在模型中跟踪“当前页面”,并且只允许访问“当前页面”上的图像。然后在连接到linkActivated()的插槽中,通知模型更改页面。我将不作详细介绍,因为这严重违反了模型/视图背后的整个理念。这样做的“正确方法”是将QListView子类化并添加分页支持,但正如我所说的,为什么不使用滚动条呢?这样做对性能没有任何影响
5.使用,将所有“页面”添加到Widget(),然后根据需要调用setCurrentIndex/Widget()来切换页面
思想:
看起来您非常致力于克隆Google Image search的外观、感觉和行为,这很好,但Google Image search是一个web应用程序,它使用的交互模式与普通桌面应用程序(链接、页面等)非常不同。您可能正在开发一个桌面应用程序,通过尝试模拟web应用程序的行为,您会发现这很困难,因为API的设计不支持这种交互。无论如何,这是可行的,但你会有你的工作适合你
如果你非常想坚持基于web的交互风格,为什么不用javascript和HTML编写你的应用程序,并将其放入一个?我经常觉得有用的东西中——将你的小部件的背景颜色设置为蓝色或绿色或一些可笑的东西。然后您将能够看到小部件的实际位置,以及其他元素的位置。我对QT不太熟悉,但这在使用任何语言的GUI库时都会有所帮助。我不知道QT是否这样做,但您应该能够将click类型的事件绑定到小部件上。+1用于推荐解决此问题的正确QT方法。除非图像网格是静态的,否则应该使用Qt的模型/视图来解决此问题。
QLabel *linkLabel = new QLabel;
linkLabel->setTextFormat( Qt::RichText )
linkLabel->setText( "<a href=\"someurl\"> Click me! </a>" );
connect( linkLabel, SIGNAL( linkActivated ( const QString & link ) ), .... )