Qt Widgets似乎与其他小部件重叠,但它们不应该重叠

时间:2010-10-15 14:38:06

标签: qt4

我使用setGeometry()来移动和调整窗口上的一些按钮和列表的大小。 问题是按钮和列表有一定的顺序,并且奇怪地重叠。我甚至不希望它们重叠,也不理解为什么它们首先重叠。

正如他们在下面的代码中,我唯一可以点击的是BtnPlay。鼠标悬停时,另一个按钮甚至没有变化。根据我如何定位它们,事情变得可以点击。

有一点我首先创建了小部件,最右边的小部件,以及最后在原点创建的小部件。一切正常,这让我相信它们在一个看不见的平原上重叠,但我不明白为什么或如何解决它。 此外,当我在列表附近放置一个按钮(按钮位于列表的左侧)时,由于某种原因,列表不再可点击。 设置几何体允许我设置小部件的左上角坐标,宽度和高度。我不明白他们为什么会相互干涉。

 int Gui_Init(int argc, char *argv[])
 {
 QApplication app(argc, argv);
 app.setStyle("plastique");
 QWidget Window;
 Window.resize(800, 600);

 QTrackList = new QListObj(&Window);
 RebuildButton BtnRB(&Window);
 PlayButton BtnPlay(&Window);

 Window.show();
 return app.exec();
 return 0;
 }


 RebuildButton::RebuildButton(QWidget *parent) : QWidget(parent)
 {
 Rebuild = new QPushButton(tr("Rebuild Library"), this);
 Rebuild->setGeometry(400,575,100,25);
 connect(Rebuild, SIGNAL(clicked()), this, SLOT(RebuildLibrary()));
 }


 PlayButton::PlayButton(QWidget *parent) : QWidget(parent)
 {
 PlayBtn = new QPushButton(tr("Play Track"), this);
 PlayBtn->setGeometry(400, 550, 100, 25);
 connect(PlayBtn, SIGNAL(clicked()), this, SLOT(PlayTrack()));
 }

QListObj的构造函数:

 QListObj::QListObj(QWidget *parent) : QWidget(parent)
 {
 List = new QListWidget(parent);
 List->setGeometry(500,0,300,600);
 new QListWidgetItem(tr("fix it"), List);
 connect(List, SIGNAL(itemSelectionChanged()), this, SLOT(SelectTrack()));
 }

1 个答案:

答案 0 :(得分:1)

您的设计有点不合常规,将QWidget子类化为包含按钮,但我怀疑您的问题可能是您正在为按钮设置相对于包含QWidget子类的几何({{ 1}}和RebuildButton)但不设置PlayButtonRebuildButton小部件本身的几何图形。

当您对事物的运作方式感到更加自在时,您可能需要重新设计一下,并尝试将您的gui与业务逻辑分开。创建一个PlayButton的子类作为您的应用程序窗口(或使用QWidget)并使用布局管理器的组合来添加/布局该子类构造函数中的所有gui控件。

然后我会建议您将所有按钮信号连接到窗口类中的私有插槽,并从这些插槽中发出自定义信号,触发业务逻辑在其他地方执行。

相关问题