Qt窗口小部件似乎与其他窗口小部件重叠时,他们不应该

问题描述:

我使用setGeometry()来移动和调整窗口上的一些按钮和列表。 问题是按钮和列表有一定的顺序,并且奇怪地重叠。我甚至不希望它们重叠,也不明白它们为什么重叠在一起。Qt窗口小部件似乎与其他窗口小部件重叠时,他们不应该

因为他们在下面的代码中,我唯一能点击的就是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())); 
} 

你的设计有点标新立异,继承QWidget包含一个按钮,但我怀疑你的问题可能是您正在设置相对按钮几何到包含QWidget的子类(RebuildButtonPlayButton),但不会为RebuildButtonPlayButton小部件本身设置几何。

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

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