2010-10-15 67 views
1

我使用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())); 
} 

回答

1

你的設計有點標新立異,繼承QWidget包含一個按鈕,但我懷疑你的問題可能是您正在設置相對按鈕幾何到包含QWidget的子類(RebuildButtonPlayButton),但不會爲RebuildButtonPlayButton小部件本身設置幾何。

當您對事物的工作方式感覺更舒適時,您可能需要重新設計一下,並嘗試將您的GUI與業務邏輯分開。創建QWidget的子類以充當您的應用程序窗口(或使用QMainWindow),並使用佈局管理器的組合在該子類構造函數中添加/佈置所有的gui控件。

然後,我會建議你將所有的按鈕信號連接到窗口類中的專用插槽,並從這些插槽發出觸發業務邏輯在其他位置執行的自定義信號。

相關問題