我有一个QBoxLayout来显示数据库中的排行榜。我想这样对齐它们,但似乎没有任何效果。我使用了setAlignment,添加了空格并删除了间距和边距,并且在我不想要它们之间仍然存在间距。
PlayerList * playerList= new PlayerList();
int xPos=this->width()/2 -200;
int yPos=100;
QFontDatabase::addApplicationFont(":/fonts/FredokaOne-Regular.ttf");
QFont f("Fredoka One", 12, QFont::Normal);
QSqlQuery query;
query.exec(query);
QVBoxLayout * layoutV=new QVBoxLayout;
while(query.next()){
Label1 = new QLabel;
Label2 = new QLabel;
Label3 = new QLabel;
Label1->setFont(f);
Label2->setFont(f);
Label3->setFont(f);
Label1->setStyleSheet("color: white");
Label2->setStyleSheet("color: white");
Label3->setStyleSheet("color: white");
QHBoxLayout * layoutH= new QHBoxLayout;
Label1->setSizePolicy(QSizePolicy::Maximum,QSizePolicy::Minimum);
Label2->setSizePolicy(QSizePolicy::Maximum,QSizePolicy::Minimum);
Label3->setSizePolicy(QSizePolicy::Maximum,QSizePolicy::Minimum);
Label1->setText(query.value(0).toString());
Label2->setText(query.value(1).toString());
Label3->setText(query.value(2).toString());
int val=0;
QString yea = "";
int text = 0;
text = Label3->text().length();
if(text<=16){
val=16-text;
for(int i=0;i<val;i++) yea+=" ";
}
Label3->setText(query.value(2).toString()+yea+" ");
yea = "";
text = Label1->text().length();
if(text<=16){
val=16-text;
for(int i=0;i<val;i++) yea+=" ";
}
Label1->setText(query.value(0).toString()+yea+" ");
yea=" ";
qDebug() << Label1->text() << yea << Label3->text() << yea << Label2->text();
layoutH->addStretch();
layoutH->addWidget(Label1);
layoutH->addWidget(Label3);
layoutH->addWidget(Label2);
layoutH->addStretch();
layoutH->setSpacing(0);
layoutV->addLayout(layoutH);
}
playerList->setStyleSheet("background-color: black");
playerList->setLayout(layoutV);
scene->addWidget(playerList->scrollArea)->setPos(xPos,yPos);
https://imgur.com/2MM9rcE 这就是它在布局中的样子,这就是它在qDebug中的样子: https://imgur.com/VNduNdz
答案 0 :(得分:0)
我很难猜到哪个是你想要的理想状态。
通常缺少的是:
layout->addWidget(label);
这种方式label
从现在起由layout
管理。
只有这样才能考虑修剪太长的字符串等等。