Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在QT(PyQT)中实现类似于Google图像搜索的布局?_Python_Qt_Qt4_Pyqt - Fatal编程技术网

Python 如何在QT(PyQT)中实现类似于Google图像搜索的布局?

Python 如何在QT(PyQT)中实现类似于Google图像搜索的布局?,python,qt,qt4,pyqt,Python,Qt,Qt4,Pyqt,我是新来的。我在我的项目中使用PyQT进行GUI开发。我想在我的应用程序中实现这种布局。此应用程序从图像数据库中搜索图像。谷歌图像搜索布局是我的理想选择 我正在学习“使用Python和Qt进行快速GUI编程”这本书,我对布局很熟悉。我想我需要使用网格布局,每个网格框中的每个结果图像对每个网格框内的(图像、Qlabel、Qlabel)使用垂直布局 这些是我面临的一些问题 重要的是,我无法显示图像。我需要什么控件/小部件?我找不到与.NET的PictureBox类似的东西 如何通过像图中那样的固

我是新来的。我在我的项目中使用PyQT进行GUI开发。我想在我的应用程序中实现这种布局。此应用程序从图像数据库中搜索图像。谷歌图像搜索布局是我的理想选择

我正在学习“使用Python和Qt进行快速GUI编程”这本书,我对布局很熟悉。我想我需要使用网格布局,每个网格框中的每个结果图像对每个网格框内的(图像、Qlabel、Qlabel)使用垂直布局

这些是我面临的一些问题

  • 重要的是,我无法显示图像。我需要什么控件/小部件?我找不到与.NET的PictureBox类似的东西

  • 如何通过像图中那样的固定间隙来分离这些图像结果?我正在使用水平和垂直间隔,但这不起作用

  • 如何将QLabel设置为可单击(如超链接)。我不想打开URL。只有文本应该是可点击的。所以,当用户点击链接时。我可以显示更多信息(比如当他点击下一个页码时显示下一组结果,或者当用户点击“视图”时显示一个完整图像的新窗口),我们对此有什么新的控制吗

  • 这是另一个重要问题。我将显示结果的页码(如图所示)&假设它们是可点击的。如何加载结果的新
    页面
    ?我的意思是,QT中的
    page
    的等价物是什么

  • 你可以猜到。这肯定不会是GUI的第一页。第一页将完全像(一个带有按钮的大徽标和文本框)。当用户单击搜索按钮时。将显示此页面。同样的问题再次出现。如何更改页面


  • 请给出一个我需要的控件列表。如果我不知道什么,请告诉我。

    尝试使用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 ) ), .... )